算法笔记 经典取石子游戏总结 博弈论

经典取石子游戏总结

1.巴什博弈

有一堆石子共n个,A和B轮流取,A先取。每次最少取1个,最多取m个,先取完者获胜(即没有石子取的人失败)。A与B都足够聪明,问A能否获胜。

结论:当n%(m+1)!=0时A必胜,否则必败。

2.斐波那契博弈

有一堆石子共n个,A和B轮流取,A先取。每次最少取1个。第一次不能取完。从第二次开始,每个人取的石子数至少为1,至多为前一个人取的石子数的2倍。先取完者获胜。A与B都足够聪明,问A是否获胜。

结论:若n不是斐波那契数则A必胜,否则必败。

3.威佐夫博弈

两堆石子分别有n,m个,A和B轮流取,A先取。每次可以从一堆中取走任意数量的石子(至少取一个),或者从两堆中取出相同数量的石子,先取完者获胜。A与B都足够聪明,问A是否能获胜。

结论:当int(abs(m - n) * (√5 + 1) / 2) != min⁡(m, n)时A必胜,否则必败。

4.尼姆博奕

有n堆石子,每堆石子m[i]个,A和B轮流取,A先取。每次可以从某一堆中取任意个石子(至少取一个)。先取完者获胜。A与B都足够聪明,问A是否能获胜。

结论:当m[0] ^ m[1] ^ … ^ m[n - 1] != 0时A必胜,否则必败。

5.反尼姆博奕

有n堆石子,每堆石子m[i]个,A和B轮流取,A先取。每次可以从某一堆中取任意个石子(至少取一个)。先取完者失败。A与B都足够聪明,问A是否能获胜。

结论:统计石子个数大于1的堆数为a,设b=m[0]m[1]…m[n-1],若(a&&b||!a&&!b)则A必胜,否则必败。

6.其他模型

  • n个石子摆成一圈,A和B轮流取,A先取。每次可以取1个或者相邻的2个(中间有空位不算相邻),先取完者获胜。A与B都足够聪明,问A是否能获胜。

    结论:当n == 1 || n == 2时A必胜,否则必败。

  • 有n堆石子,每堆石子m[i]个,A和B轮流取,A先取。每次至少从某一堆石子中取一个,每堆石子最多取x[i]个。先取完者获胜,A与B都足够聪明,问A是否能获胜。

    设a[i] = m[i] % (x[i] + 1), b = a[0] ^ a[1] ^ … ^ a[n-1]。若b != 0则A必胜,否则必败。

  • 有n堆石子,每堆石子m[i]个,A和B轮流取,A先取。每次从某一堆石子中取任意个(至少1个),且取好石子后还可以将剩余石子中的任意个放到其他的一堆或几堆中(一堆石子取完了就不能往这堆中放石子)。先取完者获胜,A与B都足够聪明,问A是否能获胜。

    统计每一个石子数出现的次数。若存在一个石子数的出现次数为偶数,则A必胜,否则必败。

你可能感兴趣的:(算法)