硬币游戏问题输入为7时获胜的方式数量

时间:2019-10-20 03:21:22

标签: algorithm data-structures

我正在研究经典的硬币游戏问题:
爱丽丝和鲍勃正在玩一堆硬币。玩家依次从堆中挑出几个硬币。每次允许玩家选择1、2或4个硬币,而获得最后一个硬币的玩家就是获胜者。爱丽丝选第一。
 我实际上不知道结果如何。

    coinGame(1)= ('Alice', 1)
    coinGame(2) = ('Alice', 1)
    coinGame(3) = ('Bob', 2)
    coinGame(4) = ('Alice', 3)
    coinGame(5) = ('Alice', 2)
    coinGame(6) = ('Bob', 6)
    coinGame(7) = ('Alice', 8).

我了解1,2,3 ... 6的输出,但不了解7及之后的结果。
对于输入6,由于爱丽丝始终会到达硬币2、4和5。因此,鲍勃只需要选择1、2或4中的任何一个即可赢得比赛。总方式为1 + 3 + 2 = 6 对于输入7,Bob可以达到3和6,然后Alice只需选择4或1个硬币就可以以2 + 6 = 8种方式获胜。我不明白的是,对于输入7,爱丽丝也可以达到5,然后鲍勃只选择2获胜。为什么我们忽略此案并认为爱丽丝获胜?

希望我能澄清一下。

谢谢!

1 个答案:

答案 0 :(得分:0)

一个关键点
如果鲍勃赢了游戏,那么在某些策略下,开始游戏的人会变得松懈。
如果爱丽丝(Alice)赢了游戏,那么开始游戏的人就是赢家。

因此,从每个N中检查Bob在N-1,N-2和N-4中是否有任何获胜位置。 如果是的话,那么爱丽丝将以鲍勃(Bob)赢得的头寸总和来获胜。

如果爱丽丝要从N-1,N-2和N-4获胜,那么爱丽丝肯定会放弃与N的这场比赛。
因为从位置N-1,N-2和N-4开始游戏的人赢得了比赛。 当爱丽丝(Alice)转弯给鲍勃(Bob)时,鲍勃(Bob)在N-1,N-2和N-4中只会得到一个。 从这些位置开始比赛的人将赢得比赛。

N>=5
sum=0
if Bob wins in N-1
    sum+=coinGame(N-1).count
if Bob wins in N-2
    sum+=coinGame(N-2).count
if Bob Wins in N-4 
    sum+=coinGame(N-4).count

if sum==0
   Bob wins with coinGame(N-1).count + coinGame(N-2).count + coinGame(N-4).count
else
   Alice wins with sum

查找coinGame(7)
给定 coinGame(3)=('Bob',2)7-4
coinGame(5)=('爱丽丝',2)7-2
coinGame(6)=('Bob',6)7-1

Bob以6的成绩从6赢得比赛,以2的成绩从3赢得比赛
因此,爱丽丝将从8胜7负赢得比赛。