取走最后一颗石子的输。
刚一开始,我想可能要把sg的值变一下。原先sg(0)=0; 我想如果保持0为输态,那么sg(1)就应该是0,而sg(0)!=0; 但是sg函数怎么能随便改呢,sg不仅仅是个符号,他后面的性质和他的定义有密切的联系。
回顾sg:
sg游戏的特点是信息对称。所以每个状态的胜负确定。容易理解,双方都想赢,必输态肯定是子状态都是必胜态才行。不然,就可以找到一个必输态,从而是自己必胜。所以,必胜态就是能达到必输态的。必输态只能达到必胜态。从结果往前搜索自然可以把博弈树上的点的状态都找到。但是,时间空间开销太大。游戏图和游戏的描述应该是完全等价的。如果这样做时间效率低,说明图上一定是浪费了什么必要的信息。或者说求了没必要的信息。这个图有什么特点呢。博弈对象又有什么特点呢。
sg是一个从状态空间——》自然数的函数。自变量为当前状态,函数值等于mex(x的子状态),mex是定义在集合上的函数。为集合中不存在的最小自然数。sg的值,说明在这值之前的,当前状态都可达。
sg函数能把这个问题等价于子问题的异或和的形式。考虑多个游戏异并行的形式。每次只能改变一个子游戏的sg值。如果一开始或和为0,那么这次肯定不为零。如果一开始,不为零,那么总能有一个办法,让他为0;类比一下,0是输态,子态不由他确定,非0就是胜态,总能找到到达0的一个方法。
现在想想,在图上暴搜,是不是没有考虑到每一步只改变一个子游戏?
现在说变形的。
结论是在如果存在一堆石子大于1,那么结论不变。
如果都不大于1了,那么偶数个的时候应该必胜sg为0。
为啥大于1结论还是用呢? 比如就有一个大于1的,先手总是可以把它变为0或1,达到第二种情况。
如果有二个或两个以上的,那么sg变为0之后,应该至少还有两个大于1的。这样后手再次走的话,一定会走到sg不为零,且至少有一个大于1的。这不可能是终止状态。
sg不是0好在什么地方呢?他有决定权。
但是到了最后怎么样?只剩下一个的堆。那么sg最多为1,只能走0,决定权没了。终止态的sg是0,0是必胜态。