AGC048
https://atcoder.jp/contests/agc048
D - Pocky Game
先找结论:
- 每个人的最优决策一定是“只拿一个”或者“全部拿完”。因为“拿多于一个但不拿完”之后下一步的决策集合是“只拿一个”的子集
- 若当前局面 First 必胜,那么给最左边加一个石子仍然 First 必胜
- 最左边石子足够多时 First 必胜
- 根据上两条,\(\exists x\) 使得当且仅当最左边石子数 \(\ge x\) 时 First 必胜
然后就可以 DP 了。设 \(f[l,r]\) 表示当前轮到 First,剩下区间 \([l,r]\) 中的石子,当且仅当 \(a_{l}\ge f[l,r]\) 是 First 必胜,类似地可以设出 \(g\)
考虑转移(以 \(f\) 为例):若 \(a_{r}<f[l+1,r]\),那么 First 拿完 \(a_l\) 获胜;否则只拿一个,若 \(a_{l}-1<g[l,r-1]\) 那么 Second 拿完 \(a_r\) 获胜;否则只拿一个 \(\cdots\)
谁获胜取决于 \(a_{l}-f[l,r-1]\) 和 \(a_{r}-g[l+1,r]\) 的大小,可以得到 \(f[l,r]=a_{r}-g[l+1,r]+f[l,r-1]+1\)