假设我们有一个装满硬币的袋子。其中一些的价值为1,相同的价值为2。可以确保袋子中至少有一个价值2的硬币。 爱丽丝和鲍勃玩游戏。爱丽丝总是开始。您交替抽出一个硬币,并且抽出最后一个值为2的硬币的玩家将赢得比赛。 现在,我感兴趣的是,如果有x个值为1的硬币和y个值为2的y硬币,爱丽丝将赢得比赛。
我知道如何用正态概率理论解决这个问题。但是我正在完全理解动态编程,因此我对动态编程方法很感兴趣。
答案 0 :(得分:1)
伪代码:计算alice和bob获胜的方式数量,然后就可以得出概率。使用相当多的符号滥用方式,例如布尔值为0和1
dp (x1, x2, isAliceTurn):
if x1 < 0: # last move was not actually a valid move
return <0, 0>
if x2 == 0: # game ended
return <!isAliceTurn, isAliceTurn>
# we can either remove a coin of type x1 or of type x2
return dp(x1 - 1, x2, !isAliceTurn) + dp(x1, x2 - 1, !isAliceTurn)
aliceWins, BobWins = dp(x1, x2, true)
print(aliceWins/(BobWins + aliceWins))