我正在研究经典的硬币游戏问题:
爱丽丝和鲍勃正在玩一堆硬币。玩家依次从堆中挑出几个硬币。每次允许玩家选择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获胜。为什么我们忽略此案并认为爱丽丝获胜?
希望我能澄清一下。
谢谢!
答案 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负赢得比赛。