http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html
这种类型,可以想成这样,有N组游戏,有N个穿红色衣服的人代表先手,有N个穿蓝色衣服的人代表后手,这个时候,编号相同的人和游戏分到一组游戏,既第i号穿红色衣服人和第i号穿蓝色衣服的人做第i个游戏。游戏开始后,首先所有穿红衣服的人先操作,然后所有穿蓝色衣服的人再操作,这样轮流下去。直到最后还没游戏完的一组,这组如果是红色衣服的人胜利,那么该游戏先手必胜,如果是蓝色衣服的人胜利,就是先手必败。
很明显,Every-SG不仅仅像其他SG那样仅仅跟SG值有关,还与一个游戏的时间长度有关。
如果先手想赢,那么,在做先手必胜的单一游戏时,他肯定是想把战线尽量拉长。在做先手必败的单一游戏时,他肯定是想把游戏尽快结束。
于是我们开一个Step数组。
表示对于先手必胜的单一游戏而言,它最少走好多步胜利。对于先手必败的单一游戏而言,它最多走好多步。
这样,我们只需要看最后所有单一游戏最大的step那组的SG是0还是非0就可以断定是否先手必胜了。
很容易得出:
(u是v的子状态)
step[v] = 0; (v为终止状态)
step[v] = max{step[u]} + 1; (sg[v]>0,sg[u]=0)
step[v] = min{step[u]} + 1; (sg[v]==0)