会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
解题思路
用博弈 DFS 判断必胜必败。设 dfs(n) 表示:还剩 n 颗石子、轮到当前玩家取时,这个人能否必胜(True 赢,False 输)。原问题就是求 dfs(n):它为 True 则输出 YES,否则输出 NO。双方都按最优策略走。
- 先手赢,等价于能把后手送进一个必输局面。也就是 dfs(n−1)、dfs(n−2)、…、dfs(n−k) 里,只要有一个是 False(取走对应颗数后剩余不能为负),当前玩家就能赢。
- 边界:dfs(0)=False,已经没有石子,当前玩家无法行动,算输。
- 枚举取走 i=1∼min(k,n) 颗,用 ok 收集「是否存在一种取法让对方必输」:ok=ok or not dfs(n−i)。
- 用字典 d 记下每个 n 算过的结果,避免同一局面重复搜索。