POI2009 完结撒花!
Kam
为了满足题目条件,我们可以做差分
把差分后的序列当作石子堆,这样原序列中拿走一颗石子相当于差分序列里把一颗石子推到后面一堆去
那么就是阶梯博弈了
(阶梯博弈就是谁先把石子全部推下去谁赢)
阶梯博弈的策略是:
- 先手若把偶数堆的石子推到奇数堆,后手就把这些石子推到下一个偶数堆(这样奇数堆状态不会变)
- 先手若把奇数堆的石子推到偶数堆,这时根据 SG 函数来做奇数堆的 Nim 博弈
所以阶梯博弈实际上就是奇数堆的 Nim
Gas
如果 s 是 ∞+ 的话,这题可以考虑贪心的做法
然而既然有 s 这个限制,那么可以口胡想象到的是(简单的)贪心可能会出锅。。。
(窝当然不会证明啦)
那么 DP 严肃地贪心一下好了
(以下 DP 贪心方式来自学长博客)
对每个点记录两个值:
- coverd,表示这个点的距离为 d 的祖先及其兄弟们有多少个被覆盖(?)
- needd,表示这个点的子树下距离为 d 的点有几个需要被覆盖(?)