Skip to content

#算法 #icg #nimm游戏

公平组合游戏 - OI Wiki (oi-wiki.org)博弈论导读 - 知乎 (zhihu.com)

n堆物品,每堆有ai个,两个玩家轮流取走任意一堆的任意个物品,但不能不取。 取走最后一个物品的人获胜

定义 必胜状态 为 先手必胜的状态必败状态 为 先手必败的状态

结论

a1a2a3...an0 当前状态获胜 ,反之,当前状态失败

证明

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

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

为什么异或值会和状态的胜负有关?下面给出了这个定理的证明过程。

为了证明该定理,只需要证明下面三个定理:

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

·定理 2: 对于a1a2an0的局面,一定存在某种移动使得a1a2an=0

==·定理 3: 对于a1a2an=0的局面,一定不存在某种移动使得a1a2an=0==

对于定理 1, 没有后继状态的状态只有一个,即全 0 局面。此时a1a2an=0

对于定理 2,不妨假设a1a2an=k0。如果我们要将ai 改 为 ai,则ai=aik

假设k的二进制最高位 1 为d,即2dk<2d+1。根据异或定义,一定有奇数个ai的二进制第d

位为 1。满足这个条件的ai一定也满足ai>aik,因而这也是个合法的移动。

对于定理 3,如果我们要将ai改为ai则根据异或运算律可以得出ai=ai因而这不是个合法的

移动。

对于a1a2an=0的局面,对于 第 i 位 ,都是 偶数个1, 无论 减多少 都会令 其中一位或多位i 的1的数量由偶数 变为 奇数 ,最终 让 第i 位 不为0