AGC048

https://atcoder.jp/contests/agc048

D - Pocky Game

先找结论:

  • 每个人的最优决策一定是“只拿一个”或者“全部拿完”。因为“拿多于一个但不拿完”之后下一步的决策集合是“只拿一个”的子集
  • 若当前局面 First 必胜,那么给最左边加一个石子仍然 First 必胜
  • 最左边石子足够多时 First 必胜
  • 根据上两条,x 使得当且仅当最左边石子数 x 时 First 必胜

然后就可以 DP 了。设 f[l,r] 表示当前轮到 First,剩下区间 [l,r] 中的石子,当且仅当 alf[l,r] 是 First 必胜,类似地可以设出 g

考虑转移(以 f 为例):若 ar<f[l+1,r],那么 First 拿完 al 获胜;否则只拿一个,若 al1<g[l,r1] 那么 Second 拿完 ar 获胜;否则只拿一个
谁获胜取决于 alf[l,r1]arg[l+1,r] 的大小,可以得到 f[l,r]=arg[l+1,r]+f[l,r1]+1

posted @   401rk8  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示