硬币游戏1:给x个石子,然后给k个数字,首先取完所有石子的获胜。
可得x=0时,为必败态;如果j-ai为必败态的话,j即为必胜态;如果对于任意的j-ai都是必败必胜态的话,那么j就是必胜态。可用动态规划从小到大求出胜负态,这样就能知道谁会获胜。
像这样,通过考虑各个壮态的胜负条件,判断必胜态和必败态,是有胜败的游戏的基础。
A Funny Game:给定n枚硬币,围成一个圈,每次可以取走一或两枚硬币,问谁最后能赢。
事实是,除了特判条件下,先手的必输。在这类游戏中,作出对称状态后在完全模仿对手的策略是常常有效的。
综上所述,要灵活考虑当前游戏的胜负状态,最优策略往往是唯一的,对胜负态提前规定好的游戏来说。
Nim(又叫Grundy值,国内常说SG函数)
取石子游戏:给定n堆石子,每堆各有ai个石子,轮流从非空堆中取走至少一个石子,谁最终获胜?
该游戏的策略是众多游戏的基础,要判断游戏的胜负用异或运算就好了。(从二进制的角度考虑问题)。可以证实必败态只能转移到必胜态,必胜态也总是能转移到必败态。(注意,两者有一定区别)
Grundy数
硬币游戏2:给定n堆石子,然后k个数字。谁赢?先手还是后手?
Grandy值:是任意一步所能转移到的Grandy值以外的最小非负整数。这是一堆石子的grandy值求法,可以将其看作Nim中的一个石子堆。
因此,ans=各堆石子的grandy值的异或。
其实就是由于转移条件的限制,然后将新的转移条件用Grandy值封装一下转换一下。
核心还是Ni m.