1 条题解
-
0
这是官方题解的 AI 中文翻译。
首先,我们注意到两个有用的事实:
- 最大化所取元素之和,等价于最大化你与对手所取元素之差。
- 只要桌上还剩至少一块,两个人已经吃掉的总量总是相同,因此此时双方的差值为 。
为了解决本题,我们可以采用 的动态规划:
设 表示当前在区间 上进行游戏,且当前你比对手晚 秒开始吃( 可以为负),此时你与对手所取总量的差值。
动态规划的初始状态为:,最终答案为 。
的正负决定了当前由谁来选择先取哪一块。转移方式如下:
- 当 时:
- 当 时:
在这个动态规划中,,因此状态总数为 ,每个状态有两种转移。
对于满足 的子任务,我们证明如下性质:在这样的限制下,对于任意可达状态 ,都有 (特例:若 ,则 )。
证明思路如下:在任意一次转移中, 总是向 靠近,因此其绝对值要么减少,要么不会超过最后取走的那块 。因此,对于 的转移,关系始终成立;对于 的转移,由于 ,关系同样成立。
由此可知,对于每个 ,可达的 对不超过 ,总状态数为 ,每个状态仍有两种转移。
接下来,为了解决完整问题,我们需要调整动态规划的转移方式,使其始终满足 。
具体来说,如果某个人在轮到对手之前连续取了多块,他总可以先取小的再取大的。因此,我们保留 的转移(该转移保持不变量),而对于 ,我们用 替代,表示当前玩家连续取最大的若干块,直到轮到对手或游戏结束。
这些转移同样保证 ,因此总状态数为 ,每个状态有两种转移。
还需注意, 的取值仅与 和 有关,与 无关,因此可以在 的时间内预处理。
最终算法的总复杂度为 ,足以通过所有测试点。
- 1
信息
- ID
- 11044
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者