T1:
区间dp即可
T2:
考虑枚举最后一步是用哪颗药爬的,然后其他的药贪心的按(a-b)选择即可
有两条思路:
一条是考虑优化贪心选择的复杂度,
发现删去一个药之后后面的药都会向前一位,推推式子,预处理一个错位的信息就可以二分找到最多可以活到第几天
复杂度(O(nlogn))
另一条是考虑减少每次重算的冗余:
发现指针是单调的,考虑线段树分治,每次加入一些药,单调移动指针即可
回退时只需要删除一些药,指针(O(1))的跳回分治中上一层记录的位置,即可保证复杂度
用线段树维护当前的药,复杂度(O(nlog^2n))
T3:
首先显然的是行列为点,交点为边建图(这不网络流吗?)
然后考虑对图上的点黑白染色,表示选择或不选择,若有冲突,则无解(注意多测无解不要直接return!!!)
否则考虑每个连通块,设其中染黑色的点有a个,染白色的点有b个,我们把这样的连通块叫做(a,b)连通块
考虑黑白点其实是可以交换的,但一旦选择之后就不能再改变该连通块策略
那么考虑两人的博弈,用SG函数解决
对于(奇,奇)连通块,它一定会转移到必败状态(偶0),所以SG值为1
对于(奇,偶)/(偶,奇)连通块,它既可以转移到必胜(奇1),又可以转移到必败(偶0),所以SG值为2
对于(偶,偶)连通块,它只能转移到必胜状态(奇1),所以SG值为0
把所有SG值异或起来看是否是0就行了