博弈论学习笔记

博弈论

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\) 堆石子中的任意颗石子,不能操作者输。

解法

求出每个二进制位上一的个数,

posted @ 2026-02-01 15:37  fire__fly  阅读(16)  评论(0)    收藏  举报