一、NIM取石子游戏
有n堆石子,分别有
结论:一个状态是必败态当且仅当
Xor : ...1.........
a_1 : .........1...
...
a_k : ...1.........
...
a_n : ........1....
二、有向图游戏
在一个有向无环图有一个棋子,两个玩家分别使棋子沿有向边移动一格,无法移动者输。
一些显然的结论,一个节点为必胜当且仅当后继中有一个必败态,一个节点为必败态当且仅当后继都是必胜态。我们用一个dp就可以处理出每个节点的状态。
但如果多个棋子呢?我们需要扩充一个节点储存的信息。
三、SG函数和SG定理
在有向无环图的节点
SG定理:定义N个组合游戏
四、应用
模型构建的关键:正确地选取研究对象
例一
给定n个框,从左到右排列,每个框内初始可能有一些球。两位玩家轮流操作,每次操作可以选择一个框,然后把一个求丢到其左边的一个框内(如果左边没框则不能这么操作)。
求先手必胜/后手必胜的充要条件?
思路与解: 将每一个球当作一个研究对象,将坐标看成“堆的大小”,则问题转化为NIM。
例二
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件。谁没有石子可移时输掉游戏。问先手是否必胜。
思路与解: 由于涉及相对,考虑用差分。差分转化为一个问题:只能向右边移动若干个石子。于是转化为一个“阶梯博弈问题”,考虑一个N级阶梯,每级上有若干石子,选手分别从每个位置向下一级阶梯移动若干石子。这一题的关键结论为:偶数级上的石子与胜负态无关(可以用归纳法证明)。那么成为了奇数级的NIM游戏。
例三
给定n堆石子,其中第i堆的石子数目为a[i]。两人轮流操作,每次操作可以选择一堆,取走x个石子,其中x必须是集合B中的数,不能操作者判负。问是否有先手必胜策略。
思路与解: 不同堆之间独立,暴力构造有向图SG,再异或起来。
例四
给定一张100*100的棋盘,在上面有一些“皇后”(可能有多个皇后在同一位置),两人轮流操作,每次操作可以选择一个皇后进行移动,但不能使其横或纵坐标变大,也不能原地不动。先将任意一个皇后移动至(0,0)者判胜。求先手是否有必胜策略。
思路与解: 考虑转化为我们熟悉的“不能动作者负”。不能到第一列,最后一行和副对角线。然后暴力构造SG再异或。