AT_DP
攻略
-
先设计一个一定保证正确性的状态,可以完全朴素甚至可以n维
-
考虑保证正确性的情况下:合并同类状态,消除无用状态,消除无用转移。
-
对递推式进行分类,只与当前点有关的直接处理,只与以前相关的点预处理,既与当前有关又与现在有关考虑斜率优化(有单调性用单调队列,否则二分或李超)
A
显然
B
显然
C
显然
D
01背包模板
设
- 选第
件物品,那么背包容量剩余 个物品,价值为 - 不选第
件物品,那么背包容量仍然不变为 ,这时价值为
所以可以得到
滚动数组状态变为
则原方程变为:
E
设
-
拿第
件物品,那么别的物品的总价值需要凑出 考虑 件物品的最优选取方式,即最终重量为 。 -
不拿第
件物品,那么别的物品需要凑出 的价值。考虑前 件物品的最优选取方式,即最小重量为
所以可以得到
滚动数组
则原方程变为:
F
设状态
-
如果
,则 -
否则,
同时记录路径,最后从
G
由于该题为有向无环图,因此我们可以按序去搜索遍历每一个点。若该点未被访问过,则对其进行搜索;否则,就可以直接对该点保存的答案进行求最大。
H
显然
I
设
转移方程为:
计算完毕后,统计一半硬币向上的答案。
J
考虑最暴力的做法,用
注意到第几盘寿司没有区别,因此可以合并状态,只记录剩余寿司的盘数
因为
枚举当前随机到的盘子里还剩几只寿司得到如下方程:
移项整理得到转移方程:
注意到
因此任意三个数可以确定另一个数,所以可以合并状态,又因为
得到
K
设状态很重要,如果设某一个人的胜负,每一步状态都需要考虑两个决策,过于困难。
若设状态为当前操作者的胜负,则只需要考虑一个人的决策(其实是因为题面中两人没有本质上的的区别)
设
显然,状态
有一个显然的结论:在剩余
那么,如果一个状态能转移到一个必败状态,那么当前操作者一定必胜。
当前操作者只需要选择转移到那个使对手必败的状态,就可以让自己必胜(这也是博弈论的重要结论)。
所以我们可以从
L
显然游戏过程中剩下的数必然是连续的一段。设
分两种情况讨论:
-
已经取走的数为偶数个,此时先手取,
。 -
已经取走的数为奇数个,此时后手取,
。
还有一种神奇的解法:
考虑数列中存在
将数列中满足条件的数等效合并完后,数列一定满足先递减后递增,此时从两端贪心即可。
重点在于发现这种合并对全局生效
M
设
转移方程:
发现公式里每个
N
设
则枚举其中间点
合并的代价的最小值。
于是就可以推出转移方程:
前缀和优化