Nim:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,每次最少取一件,取到最后一件物品的人获胜。
结论:把每堆物品数全部异或起来,如果得到的值为0,那么后手胜,否则先手胜。

现在对于N堆物品,重新定义取石子方式,那什么策略才能先手赢?
SG函数:就是把新Nim回归到原始Nim,然后按照原始Nim进行各种操作.

SG[x]=Rmax(SG[u]|uϵ {x子节点}),SG函数就是对子节点u和Rmax(SG自定义函数)的理解.
例如:你的操作方式为每次取2,3,4个石子,那么你取的那堆石头(x个石子)所剩下的石子数就是子节点(如下图).
SG函数
以上就是对于子节点的定义.

Rmax其实也很简单,就是SG[u]在自然数(0,1,2,3…)中没有出现的最小数字(如下图).
SG函数
此时sg[5] = 0; 倘若sg[u] = {0,1,3},那么sg[x] = 2;倘若sg[u] = {0,1,2},那么sg[x] = 3 …

SG函数弄懂之后,就是回归到原始Nim。其实可以发现,原始Nim的sg[x] = x。所以同理,每一堆的sg[x]异或之后等于1先手胜,否则后手胜,回归到最原始的Nim操作,注意sg[x]是一种映射关系。
SG例题.

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2021-07-03
猜你喜欢
  • 2022-12-23
  • 2022-02-15
相关资源
相似解决方案