博弈论学习笔记
博弈论
SG函数
定义
- SG函数是在组合游戏上的函数,用 \(SG(X)\) 表示状态 \(X\) 的函数值。
公式
- 设状态 \(X\) 的所有后继状态为 \(A_1,A_2,\dots,A_k\) ,则:\(SG(X) = mex \left\{SG(A_1),SG(A_2),\dots,SG(A_k) \right\}\)。
- 若有多个相互独立的组合游戏 \(B_1,B_2,\dots,B_k\) ,则总的 \(SG\) 值为:$ SG(B_1) \oplus SG(B_2) \oplus \dots\oplus SG(B_k)$。
- 当 \(SG(X) = 0\) 时,先手必败,反之先手必胜。
结论
注意,一下所说的先手必胜均为当前状态的先手,也就是前继状态的后手。
-
若一个状态的所有后继状态均为先手必胜,则这个状态为先手必败。
-
若一个状态的所有后继状态有一个先手必败,则这个状态为先手必胜。
推论
假设状态 \(A\) 必败,则满足任何非 \(A\) 状态都可以转化成 \(A\) 状态,所有 \(A\) 状态只能转化为非 \(A\) 状态。(注意可以和只能)
NIM游戏
普通NIM游戏
题面
有 \(n\) 堆石子,第 \(i\) 堆石子有 \(a_i\) 个石子,先后手轮流从任意一堆拿走至少一枚石子,不能操作者输,问谁获胜?
解法
求出 \(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n\) ,若值为 \(0\) 则先手必败,否则先手必胜。
解释
这个用推论很好解释,这时 \(A\) 状态就是所有数异或和为 \(0\),因为不能不拿,所以 \(A\) 状态一定会被破坏为非 \(A\) 状态,而且可以证明非 \(A\) 状态一定可以变为 \(A\) 状态。
NIM-K 游戏
题面
有 \(n\) 堆石子,第 \(i\) 堆有 \(a_i\) 个石子,每次可以取走 \(1\) 至 \(k\) 堆石子中的任意颗石子,不能操作者输。
解法
求出每个二进制位上一的个数,
浙公网安备 33010602011771号