http://blog.csdn.net/luomingjun12315/article/details/45555495
这一段时间写的题和我接下来要展示的一些概念都来自这里↑。
必胜点和必败点的概念:
P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
必胜点和必败点的性质:
1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)
2、从任何必胜点N 操作,至少有一种方式可以进入必败点 P。
3、无论如何操作,必败点P 都只能进入 必胜点 N。
Sprague-Grundy定理(SG定理):
游戏和的SG函数等于各个游戏SG函数的Nim和(异或和)。这样就可以将每一个子游戏分而治之,从而简化了问题。而Bouton定理就是Sprague-Grundy定理在Nim游戏中的直接应用,因为单堆的Nim游戏 SG函数满足 SG(x) = x。
SG函数:
首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。
对于任意状态 x , 定义 SG(x) = mex(S),其中 S 是 x 后继状态的SG函数值的集合。如 x 有三个后继状态分别为 SG(a),SG(b),SG(c),那么SG(x) = mex{SG(a),SG(b),SG(c)}。 这样 集合S 的终态必然是空集,所以SG函数的终态为 SG(x) = 0,当且仅当 x 为必败点P时。
我的理解:
试想一个博弈以不能操作为输,后手的保证胜利大多数基于对称方案,也就是说,对于先手的每一步,后手都有对应的步,异或同0异1刚好解决这个问题。
我对mex运算的理解是这是一种分层,各种取数方法博弈的dp停留在01这一层,如果多个类似的游戏综合起来就会有http://poj.org/problem?id=2425这棵树一样会有一些有很多分支的节点,sg函数的mex操作这样完成了节点的分层(一个位置的sg值的二进制的每一位代表这个位置每一层的状态)。然后再进行游戏的前后手操作匹配,异或和如果为0则表明后手对先手的每一步都能匹配,此时后手必胜。
其实我觉得这个理解并不是很重要,直接套板子也能写,但是我不知道原理就会浑身难受所以。。还是找了资料大概理解了一下原理。