三堆Wythoff比赛的冷落

时间:2012-07-19 06:16:33

标签: algorithm

这是HW:

Wythoff的比赛是有两名球员,在这种情况下有3堆石头。每个玩家轮流从堆中取出石头,如果他们拿起最后一块石头,则玩家获胜。每转一个玩家可以从一堆中取出N个石头,从两个堆中取出N个石头,或从所有三个堆中取出N个石头。

获胜配置是第一个玩家可以强制获胜的配置。例如,(0,0,13),(0,11,11)和(5,5,5)是获胜配置,因为第一个玩家可以立即删除所有宝石。

失败的配置是第二个玩家可以强制获胜的配置,无论第一个玩家做什么。例如,(0,1,2)和(1,3,3)正在失去配置:任何合法移动都会为第二个玩家留下获胜配置。

考虑所有丢失配置(xi,yi,zi),其中xi <= yi&lt; = zi&lt; = 100。 我们可以验证Σ(xi + yi + zi)= 173895。

我搜索过并搜索过但无法弄清楚如何找到所有失败的(冷)位置。通过将坐标的二进制值相加得到nimnumber并且如果nimnumber> 0然后它是一个冷的位置。但我最终得到了Σ(xi + yi + zi)&gt; 1mil的。任何人都可以帮助我指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

既然是家庭作业,我不会发布完整的解决方案,但这里有一个提示:

你已经知道xi&lt; = yi&lt; = zi&lt; = 100,所以配置的数量永远不会超过2 * 101 ^ 3(不管是谁的是x2),这不是超过200万。尝试制作一个查找表(例如isWinningPosition[][][][],其中isWinningPosition[a][b][c][d]对应于大小为a,b,c的堆,并且它是转向的)并递归。 (警告:查找表中的每个条目都需要处理truefalsenot computed作为三个单独的内容。)