这两天认识了几个组合游戏的基础模型,希望自己能更新下去。。
Ferguson游戏
Description
- Initial
有两个盒子,一个装有 m 颗糖,一个装有 n 颗糖,表示为 (m, n) .
- Step
每次清空一个盒子,将另一个盒子里的糖转移一些过来,并保证两个盒子至少各有一颗糖。
- Win
最后进行转移糖者胜,无法转移糖者败。
Solve
m, n 都为奇数,先手败;m, n 至少一个为偶数,先手胜。
Proof
显然,初始状态为(1, 1),先手必败;
设 max(m, n) = 2,即初始状态为 (1, 2),(2, 1) 或 (2, 2),对于 (1, 2),(2, 1) 先手可以把 1 清空,然后将 2 分为 (1, 1) ,先手胜;对于 (2, 2) ,先手可以把其中一个 2 清空,然后将另一个 2 分为 (1, 1) ,先手胜。符合结论。
设 max(m, n) < k 均符合结论,当 max(m, n) = k :
设 m 与 n 至少一个为偶数(假设m是偶数),则将 n 清空,把 m 分为两个奇数 (a, b) ,由于max(a, b) < k ,因此(a, b) 必败,(m, n) 必胜(利用规则2);
设 m 与 n 均为奇数,则只能把其中一个数分为一个奇数 a ,一个偶数 b ,由于max(a, b) < k ,因此对于任何的方式分解出的(a, b) 均必胜,(m, n) 必败(利用规则1);
故 max(m, n) = k 符合结论。
故对于任意 (m, n) 结论成立。
chomp!游戏
Description
- Initial
有一个 m * n 的棋盘,棋盘的每一个格子用(x, y)表示,最左下角是(1, 1),最右上角是(m, n) ;
- Step
每次可以拿走一个方格,并拿走该方格右边与上边的所有方格。
- Win
谁拿到(1, 1)谁败。
Solve
当 m = n = 1,先手败;除此之外,先手均有必胜策略(先手胜)。
Proof
反证法:
假设后手能取得胜利,那么先手可以第一步拿走(m, n),若后续回合内后手通过拿走(x, y)达到了必胜状态,先手均可以第一步就拿走(x, y)来达到必胜状态。
故不存在后手必胜状态。
由于无法给出构造性证明,所以只能证明先手必胜,而不能给出广义的必胜策略。
约数游戏
Description
- Initial
桌上有 n 个数字:1~n。
- Step
两人轮流在选择一个桌上的数 x ,然后将 x 与 x 的约数都拿走。
- Win
拿去最后一个数的人胜出(无法选择数字的人失败)。
Solve
先手有必胜策略。(先手胜)
Proof
这个游戏是 chomp! 的思想的应用。
假设后手能取得胜利,那么先手可以第一步拿走 1,若后续回合内后手通过拿走 x 达到了必胜状态,先手均可以第一步就拿走 x 来达到必胜状态。
Bash Game(巴什博弈)
Description
- Initial
n 个物品堆成一堆。
- Step
两个人轮流从这堆物品中取物,规定每次至少取一个,最多取 m 个。
- Win
最后取光者得胜。(无法取者败)
Solve
如果 n % (m+1)≠0 ,则先手必胜。
Proof
如果 n=m+1 , 显然,先手无论取多少,后手均可以将剩余物品一次全取走,所以先手败。
如果 n=k∗(m+1) ,我们从后手的角度来考虑,设先手第一次取走 x 个物品,那么后手只要再取走
m+1−x 个,此时剩余物品数量变为 (k−1)(m+1) 个,一直重复这个步骤,就可以回到先手面临 n=m+