我正是来访者,六轩岛上的第 18 个人类!!!

「不好意思,就算迎来了汝,也是 17 人。

—— 海猫鸣泣之时

博弈论主要分为公平组合游戏、非公平组合游戏、反常游戏。本文将讲解公平组合游戏。

公平组合游戏

公平组合游戏(Impartial Game)的定义如下:

  • 游戏有两个人参与,二者轮流做出决策,双方均知道游戏的完整信息;

  • 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关;

  • 游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。

有向图游戏是一个经典的公平组合游戏,它的定义如下:

在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。

事实上,大部分公平组合游戏都可以转化为有向图游戏,将每一个游戏状态作为一个节点,若一个状态 $A$ 能够通过一次决策变为状态 $B$,则连边 $A\to B$,称 $B$ 为 $A$ 的后继状态。下面都在有向图游戏的基础上讨论,以下的讨论都假设先后手都采取最优策略。

定义 必胜状态先手在该状态下能够通过一系列决策获得胜利(即先手必胜);必败状态 为 在该状态下无论先手怎么决策,后手都能够通过一系列决策获得胜利(即后手必胜)。

通过推理,我们可以得出下面三条定理:

  • 定理 1:没有后继状态的状态是必败状态。

  • 定理 2:一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态。

  • 定理 3:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。

SG 函数

为了更准确地描述胜败状态,我们引入 SG 函数。

定义 $\operatorname{mex}$ 函数为不属于集合 $S$ 的最小非负整数:

例如 $\operatorname{mex}\{ 0,1,2,5,7 \}=3$。

设状态 $x$ 有 $k$ 个后继状态 $y_1,y_2,\dots,y_k$,则有:

显然,一个状态为必败状态的充要条件为该状态的 SG 值为 $0$,必胜状态的充要条件为 SG 值不为 $0$。

假如只有一个游戏,SG 函数好像没什么用,因为我们只需要知道 SG 值是否为 $0$,而不需要知道具体数值,但如果有多个游戏,情况就不一样了。

考虑由两个有向图游戏组成的组合游戏,其中,这两个游戏相互独立,即其中任意一个游戏的任意决策都不会影响其他游戏。这个组合游戏的规则是每次要选择一个有向图游戏进行一次移动,最终无法移动的玩家失败。

定义一个有向图游戏的 SG 值为起点的 SG 值。设这两个游戏的起点分别为 $A,B$。下面我们先假设 SG 值只能降低,详细解释稍后再说。

显然当这两个游戏的 SG 值都为 $0$ 时为必败状态。

若 $SG(A)=0,SG(B)\ne 0$,先手可以将 $B$ 移动到 SG 值为 $0$ 的后继状态(因为根据 SG 函数的定义,$B$ 的所有后继状态的 SG 集合包含所有比 $SG(B)$ 小的非负整数),此时为必败状态,因此原状态为必胜状态。

若 $SG(A)=SG(B)\ne 0$,先手降低任意一个游戏的 SG 值,后手总是可以将另一个游戏的 SG 值降低到与之相等,直到两个游戏的 SG 值为 $0$,此时这个状态由先手拿到,因此后手必胜,原状态为必败状态。

若 $SG(A)\ne SG(B),SG(A)\ne 0,SG(B)\ne 0$,先手只需将 SG 值较大的游戏降低到与另一个游戏相等,就回到了上面的状态,因此原状态为必胜状态。

在上面的讨论中,我们总是让 SG 值降低,事实上,一个状态还可能转移到 SG 值比它大的后继状态,如果一个玩家这样做,那么另一个玩家只需将该状态降回原来即可(SG 值大的总是可以降低为 SG 值小的),因此升高 SG 值是无用的。

SG 定理

设 $A+B$ 表示两个相互独立的游戏组合而成的游戏,$\oplus$ 表示异或。基于上面的讨论,我们发现当 $SG(A)\oplus SG(B)=0$ 时,组合游戏为必败状态,即 $SG(A+B)=0$;当 $SG(A)\oplus SG(B)\ne 0$ 时,组合游戏为必胜状态,即 $SG(A+B)\ne 0$。我们猜测 $SG(A+B)=SG(A)\oplus SG(B)$,证明如下。

设 $C,D$ 分别表示 $A,B$ 的任意后继状态,即 $A\to C,B\to D$。则 $A+B$ 的局面要么移动 $A$,要么移动 $B$,即 $(A+B)\to\{C+B\}\cup \{A+D\}$。

由定义可得,$SG(A+B)=\operatorname{mex}\big\{\{SG(C+B)\}\cup \{SG(A+D)\}\big\}$。

考虑数学归纳法,对两个有向图进行拓扑排序,拓扑序最大的点为出度为 $0$ 的点。当 $A,B$ 都为拓扑序最大的点时,$SG(A+B)=SG(A)\oplus SG(B)$ 显然成立。假设拓扑序比 $A,B$ 大的点都满足定理,则有 $SG(C+B)=SG(C)\oplus SG(B),SG(A+D)=SG(A)\oplus SG(D)$。

于是有 $SG(A+B)=\operatorname{mex}\big\{\{SG(C)\oplus SG(B)\}\cup \{SG(A)\oplus SG(D)\}\big\}$。下面将证明 $SG(A)\oplus SG(B)$ 不属于右边两个集合的任何一个,但比它小的非负整数都属于右边两个集合的某一个。

因为 $A\to C,B\to D$,所以 $SG(A)\ne SG(C),SG(B)\ne SG(D)$,则 $SG(A)\oplus SG(B)$ 不等于 $SG(C)\oplus SG(B)$ 和 $SG(A)\oplus SG(D)$。

设 $e$ 是比 $SG(A)\oplus SG(B)$ 小的任意非负整数,$k=SG(A)\oplus SG(B)\oplus e$。令 $SG(A),SG(B),e$ 三者分别与 $k$ 异或,则至少有一者异或后会减小(因为 $k$ 的二进制最高位的 $1$ 一定来自这三者之一),但 $e\oplus k=SG(A)\oplus SG(B)>e$,因此这一者不会是 $e$。不妨设这一者为 $SG(A)$,即 $SG(A)\oplus k=SG(B)\oplus e<SG(A)$。由 $SG$ 函数的定义可知,$A$ 一定存在一个后继状态 $C^{‘}$,满足 $SG(C^{‘})=SG(B)\oplus e$,则此时有 $SG(C^{‘})\oplus SG(B)=e$,因此 $e$ 属于右边两个集合的某一个。原命题得证。

显然这个定理可以推广至多个游戏,设 $X$ 为 $n$ 个独立的有向图游戏的组合游戏,它们的起点分别为 $s_1,s_2,\dots,s_n$,则有 $SG(X)=SG(s_1)\oplus SG(s_2)\oplus \dots \oplus SG(s_n)$。

经典模型

博弈论中有很多经典的游戏,很多博弈都可以转化为这些游戏。

巴什博弈

有一堆石子,数量为 $n$,两个人轮流拿石子,每个人每次至少拿 $1$ 个,至多拿 $m$ 个,最终拿完石子的人获胜。

设 $SG(k)$ 表示 $k$ 个石子的 SG 值,显然有 $SG(0)=0$,

当 $k\le m$ 时,$k$ 可以转移到 $0$ 到 $k-1$ 任意一个局面,因此 $SG(k)=k,(k\le m)$;

当 $k=m+1$ 时,可以转移到 $1$ 到 $m$ 任意一个局面,则 $SG(m+1)=0$;

当 $k=m+2$ 时,可以转移到 $2$ 到 $m+1$ 任意一个局面,则 $SG(m+2)=1\dots\dots$

以此类推,可以得到 $SG(n)=n\bmod (m+1)$。当且仅当 $(m+1) \mid n$ 时先手必败,否则先手必胜。

Nim 游戏

有 $n$ 堆石子,第 $i$ 堆有 $a_i$ 个石子,两个玩家轮流取走任意一堆的任意个石子,但不能不取,拿完石子的人获胜。

这 $n$ 堆石子相互独立,因此可以看作 $n$ 个独立的游戏。对于一堆有 $k$ 个石子的游戏,显然有 $SG(k)=k$。因此 Nim 游戏的 SG 值为 $a_i\oplus a_2\oplus \dots \oplus a_n$,称其为 Nim 和。

考虑先手必胜时要如何操作,当 Nim 和为 $k(k>0)$ 时,设 $k$ 的二进制最高位的 $1$ 在第 $d$ 位,则一定存在 $a_i$ 满足其二进制第 $d$ 位为 $1$,于是 $a_i\oplus k <a_i$,因此只需将 $a_i$ 取到 $a_i\oplus k$ 即可。

阶梯 Nim

有 $n$ 堆石子,第 $i(i>0)$ 堆有 $a_i$ 个石子,两人轮流操作,每人每次可以任选一个 $k(k>0)$,将第 $k$ 堆石子中的任意个石子移动到第 $k-1$ 堆,第 $0$ 堆的石子无法移动,最后无法操作的人输。

结论:先手必败当且仅当奇数堆中的石子数异或和为 $0$。

证明:当奇数堆异或和为 $0$ 时,无论怎么移动都会使奇数堆的异或和大于 $0$。如果先手移动偶数堆的石子到奇数堆,后手可以将移动到奇数堆的石子再往下移动到偶数堆,异或和就变回了 $0$;如果先手移动奇数堆,可以看作两人在奇数堆上玩 Nim 游戏,所以后手可以通过移动奇数堆的石子使异或和变回 $0$。

综上,奇数堆异或和为 $0$ 的局面都由先手拿到,异或和不为 $0$ 的局面都由后手拿到。无法移动的局面为所有石子都在第 $0$ 堆,此时奇数堆的异或和为 $0$,因此该局面由先手拿到,故先手必败。

k-Nim

有 $n$ 堆石子,第 $i$ 堆有 $a_i$ 个石子,每次可以从不超过 $k$ 堆中各取走任意个石子,不能操作的人输。

结论:设 $s_i$ 表示 $a_1,a_2\dots ,a_n$ 二进制下第 $i$ 位 $1$ 的个数。则先手必败当且仅当对所有的 $s_i$,都有 $s_i\equiv 0 \pmod{(k+1)}$。

证明:

设 $s_i^{‘}=s_i\bmod (k+1)$。

$a_i$ 全为 $0$ 时为必败状态,此时满足条件。

若所有的 $s_i^{‘}$ 为 $0$,由于最多选择 $k$ 堆,因此 $s_i$ 的变化量的绝对值不会超过 $k$,并且至少有一个 $s_i$ 产生变化,所以该操作结束后一定会使得某些 $s_i^{‘}$ 不为 $0$。

若 $s_i^{‘}$ 不全为 $0$,下面将证明一定存在一种合法的方案使得所有的 $s_i^{‘}$ 变回 $0$。

考虑数学归纳法,假设当前在二进制下的第 $i$ 位,满足对所有的 $j>i$,$s_j^{‘}$ 都已经变为了 $0$,并且已经改变了 $m(m\le k)$ 堆石子。

显然对于已经改变的 $m$ 堆石子,我们任意改变其二进制下第 $i$ 位的值都是合法的。设这 $m$ 堆石子的第 $i$ 位上有 $a$ 个 $1$ 和 $b$ 个 $0$。

下面分情况讨论,

  1. $a\ge s_i^{‘}$,只需要从这 $a$ 个中选择 $s_i^{‘}$ 个将其变为 $0$ 即可。

  2. $b\ge (k+1)-s_i^{‘}$,只需要从这 $b$ 个中选择 $(k+1)-s_i^{‘}$ 个将其变为 $1$ 即可。

  3. 上述两种情况都不满足,即 $a<s_i^{‘}$ 且 $b<(k+1)-s_i^{‘}$。那么先将这 $a$ 个 $1$ 变为 $0$,然后再从这 $m$ 堆之外选 $s_i^{‘}-a$ 堆第 $i$ 位为 $1$ 的,并将其变为 $0$ 即可,此时选择的总堆数变为了 $m+s_i^{‘}-a=b+s_i^{‘}$,由于 $b<(k+1)-s_i^{‘}$,所以 $b+s_i^{‘}<k+1$,这种取法是合法的。

综上,一定存在一种合法的方案使得所有的 $s_i^{‘}$ 变回 $0$。

故 $s_i^{‘}$ 全为 $0$ 为必败状态,$s_i^{‘}$ 不全为 $0$ 为必胜状态,结论得证。

威佐夫博弈

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法:一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。

结论:设石子数量为 $a,b(a<b)$,当且仅当 $a=\lfloor \frac{\sqrt{5}+1}{2} \rfloor\times (b-a)$ 时先手必败。

证明太抽象了,自己看题解吧

例题

博弈论常用解题方法有:转化为经典模型;手算几个寻找结论;打表 SG 找规律;通过一些方法维护 SG 函数;将原游戏转化为一个新的游戏。

【模板】Nim 游戏

题目链接

模板题。

【模板】威佐夫博弈

题目链接

模板题。

CF388C Fox and Card Game

题目链接

桌子上有 $n(n\le 100)$ 堆牌,每堆有 $s_i(s_i\le 100)$ 张牌。每张牌上都有一个正整数。C 可以从任何非空牌堆的顶部取出一张牌,J 可以从任何非空牌堆的底部取出一张牌。C 先取,当所有的牌堆都变空时游戏结束。他们都想最大化他所拿牌的分数(即每张牌上正整数的和)。问他们所拿牌的分数分别是多少?

CF794E Choosing Carrot

题目链接

有一排 $n(n\le 3\times 10^5)$ 个数,甲乙轮流取,每次可以选择两端中的一端取走一个数,直到剩下一个数,甲希望剩下的数最大,乙希望最小。同时,在游戏开始前,甲可以提前操作 $k(0\le k\le n-1)$ 次(操作规则和上面一样),游戏开始后甲是先手。问对于每一个 $k$,最后剩下来的数是几。

[AGC002E] Candy Piles

题目链接

桌上有 $n(n\le 10^5)$ 堆糖果,第 $i$ 堆糖果有 $a_i$ 个糖。两人在玩游戏,轮流进行,每次可以将当前最大的那堆糖果全部吃完,或者将每堆糖果吃掉一个。吃完的人输,假设两人足够聪明,问谁有必胜策略?

SP11414 COT3 - Combat on a tree

题目链接

两人在一棵 $n(n\le 10^5)$ 个节点的树上玩游戏,根节点为 $1$,每个节点最初都是黑色或白色,他们轮流执行以下操作:从当前树中选择一个白色节点 $v$,将路径 $(1,v)$ 上的所有白色节点都变为黑色。无法操作的玩家失败,问先手是否能够必胜,并求出第一步的方案。

CF1451F Nullify The Matrix

题目链接

有一个 $n\times m$ 的棋盘,每个格子有一个非负整数的权值。

两个人轮流操作,每次操作选择两个权值非 $0$ 的格子,左上的点为起点,右下的为终点,每次移动只能向右走一格或者向下走一格,首先给起点的权值减一个正整数,然后从起点移动到终点,路径上每个点的权值随意加减(也可以不改变),但是都不能改成负数。

不能操作(全变成 $0$)的人就输了,问谁必胜。

CF1149E Election Promises

题目链接

给定一张有向无环图,每个点有一个非负整数点权。两人轮流操作,每次操作为选择一个权值为不为 $0$ 的点,并将它的值降低为一个非负整数,对于它的出点(即走一步能到达的点),可以将其值任意修改为一个非负整数(可以保持不变)。最终无法操作的人输,问先手能否必胜,如果必胜请输出第一步的方案。

P3235 [HNOI2014] 江南乐

题目链接

写过题解了

参考资料

公平组合游戏 - OI Wiki

10170 Sprague-Grundy定理是怎么想出来的 - 王赟 Maigo

菜就多练练