洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏
时间: 2023-11-06 18:51:45 浏览: 182
这道题目需要进行博弈论的思考。我们可以使用动态规划来解决这道题目。
首先,我们可以定义 $f_{i,j}$ 表示当前剩下 $i$ 到 $j$ 这些数时,当前玩家最多能获得的分数。我们可以发现,在这个状态中,当前玩家只能从 $i$ 或者 $j$ 中选择一个数进行取走,然后将剩下的部分转化为对手的状态。因此,我们可以得到如下的转移方程:
$$
f_{i,j}=\max\{a_i+\min\{f_{i+2,j},f_{i+1,j-1}\},a_j+\min\{f_{i+1,j-1},f_{i,j-2}\}\}
$$
其中 $a_i$ 表示第 $i$ 个数的分值。上述方程的含义是,当前玩家可以选择取走 $i$ 或者 $j$,如果取走 $i$,则转化为对手的状态是 $f_{i+2,j}$ 或者 $f_{i+1,j-1}$,如果取走 $j$,则转化为对手的状态是 $f_{i,j-2}$ 或者 $f_{i+1,j-1}$。当前玩家希望获得的分数是最大的,因此需要取两种情况中的较大值。
最终答案就是 $f_{1,n}$,表示从 $1$ 到 $n$ 这些数中,当前玩家最多能获得的分数。
最后,需要注意的是,我们需要使用逆序的方式来进行动态规划,即从小到大枚举区间长度 $len$,然后枚举区间起点 $i$,最终计算 $f_{1,n}$。这样可以保证在计算 $f_{i,j}$ 时,$f_{i+1,j}$ 和 $f_{i,j-1}$ 已经被计算出来了。
阅读全文