博弈论学习必寄
闲话:回收图片
有限胜负博弈
- 显然为游戏在有限步内必然结束,且结果只有胜负的游戏。
必胜态/必败态
-
先手必胜/必败的状态。
-
必胜态能由至少一个必败态转移得到,必败态只能从必胜态转移得到(即无法从必败态得到,否则就成必胜态了),若用 \(0/1\) 分别表示必胜态/必败态,那节点\(x\)的状态就是能转移到\(x\)的状态全部与起来,再取反即可。
-
在状态/转移较少时可以递推,较多时可以找规律。
典中典:取石子游戏
-
共 \(n\) 个石子,每次取 \([1,m]\) 个。
-
按上面的方法递推, \(O(nm)\) 。
-
由小学知识可知,当且仅当 \(n\!\mod (m+1)=0\) 时必败,直接判断即可, \(O(1)\) 。
-
显然跟辗转相除法有关,对每次辗转相除进行分析,不妨设状态为 \((x,y)\) ,且 \(x\gt y\)
- 若 \(x\lt 2y\) ,那么只能到达状态 \((y,x-y)\) ,递归求解即可。
- 若 \(x\ge 2y\) ,那么可以到达 \((y,x-ay)\) ,可以选到 \((y,x\mod y+y)\) 逼迫对方进行多次操作,可以扭转局势,必胜。
-
递归求解即可, \(O(\log n)\) 。
CF1033C
- 可以发现状态为有向无环图,鉴于是一个 \(1-n\) 的排列,所以边最多 \(O(n\log n)\) 个,可以直接拓扑排序+递推做。
CF1396B
-
如果最多那堆超过总石子的一半,先手一直取最多的那堆,必胜。
-
否则,
- 若总石子为偶数,可以将石子两两匹配且两个石子不在同一堆中,先手取任意一个石子的匹配都会转移到总石子为奇数或最多那堆超过一半的状态,必败。
- 若总石子为奇数,同理可得先手必胜。
证明结论的模板:Nim游♂戏
-
\(n\) 堆石子,分别有 \(a_1,a_2...a_n\) 个,每次从任意一堆中取任意个。
-
结论:先手必胜当且仅当 \(a_1\ xor\ a_2\ xor\ ...\ xor\ a_n\not =0\)
-
证明:
-
边界状态(全空)必败:显然。
-
必胜状态可以由至少一个必败状态转移得到:将最大的那个数减至其他所有数的异或和即可时异或和归零。
-
必败态只能转移到必胜态:显然,\(0\)异或上任意一个非\(0\)数都不为\(0\)。
-

浙公网安备 33010602011771号