通过动态惯例游戏赢取游戏的机会

时间:2018-11-23 22:39:43

标签: algorithm

假设我们有一个装满硬币的袋子。其中一些的价值为1,相同的价值为2。可以确保袋子中至少有一个价值2的硬币。 爱丽丝和鲍勃玩游戏。爱丽丝总是开始。您交替抽出一个硬币,并且抽出最后一个值为2的硬币的玩家将赢得比赛。 现在,我感兴趣的是,如果有x个值为1的硬币和y个值为2的y硬币,爱丽丝将赢得比赛。

我知道如何用正态概率理论解决这个问题。但是我正在完全理解动态编程,因此我对动态编程方法很感兴趣。

1 个答案:

答案 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))