众所周知litble很菜,博弈论基本不会只能背结论,最近好像石乐志,结论都忘干净了,所以复习一下。
感谢yyb大佬这篇令人感动的博客->here。
SG函数:傻逼litble对于SG函数的了解只有,必败态SG值为0,必胜态SG值不为0。每个点的SG值为其可达后继状态的SG的mex(最小没出现过的非负整数)。
若一个游戏由若干个子游戏组成(例如有若干堆石子的取石子游戏),则将所有子游戏的SG值异或起来,是0则先手败否则先手胜。
巴什博奕(Bash Game):有 n n n个石子,两名玩家每次可以取走 [ 1 , m ] [1,m] [1,m]个石子,谁不能操作谁输。
若 ( m + 1 ) ∣ n (m+1)|n (m+1)∣n,先手必败,否则必胜。
尼姆博弈(Nim Game):有 K K K堆石子,第 i i i堆有 n i n_i ni个,两名玩家每次可以从某一堆中取走一个石子,谁不能操作谁输。
若 n i n_i ni的异或和是0则先手必败,否则必胜(用SG函数可知)。
扩展:
N i m k Nim_k Nimk G a m e Game Game: 每次从一堆石子中取 [ 1 , m ] [1,m] [1,m]个,则 n i   m o d   m + 1 n_i \bmod{m+1} nimodm+1的异或和为0先手败否则先手胜(用SG函数可知)。
还有一种判断方法是二进制下每一位为 1 1 1的石子堆数能被 m + 1 m+1 m+1整除则先手败。
Bash+Nim:每次可以从 m m m堆石子中各取一个。则求出 n i n_i ni做 m + 1 m+1 m+1进制下不进位加法的和,若为0则先手必败,否则必胜。
阶梯博弈:假设有 n n n个位置,每个位置上有石子若干,你每次可以将 x x x位置上的若干石子移动到 x − 1 x-1 x−1位置上, 0 0 0位置不可操作,还是无法操作者输。这个留下奇数位置做普通的 N i m Nim Nim即可,因为偶数位置若被对手移动到了奇数位置,你可以把它移回偶数位置上,无影响。
Anti-SG:若无法操作者胜,则先手必胜的条件是:整个游戏的SG值为0且存在单一游戏的SG值 大于 1,或,整个游戏的SG值不为0且不存在单一游戏的SG值大于1。
Every-SG:对于由若干单一游戏构成的游戏集合,每个人每回合对每个未结束的游戏都要进行一步操作,最后无法操作者输。
每位选手的决策会是,对于必胜的单一游戏,尽可能拖延时间使步数变多。对于必败的,尽可能让步数减少。