考虑一行n个值为v1,v2 .......,vn的硬币。我们通过轮流对抗对手进行比赛。在每一回合中,玩家从行中选择第一枚硬币或最后一枚硬币,永久移除它,并接收硬币的价值。如果我们先行动,确定可能赢得的最大可能的金额。硬币游戏的最优策略
我的解决方案
既然我们先走了,我们既可以选择V1和V2,然后我们的对手可以从一开始或从一开始就挑。因此可能出现四个子问题。
(1,1),(1,2),(2,1),(2,2)
其中(1,1)是指,我是从开始挑[即1]并且对手也从开始选择[即1]。 (1,2)表示我从开始选择,但对手选择最后一个。
因此,如果M(i,j)
是我可以选择的最大值(i,j),则表示(i,j)为递归函数。
M(i,j) = Max{ Max{ M(i+2,j), M(i+1,j-1) } + vi, Max{ M(i+1,j-1), M(i,j-2) } + vj }
说明:当我有i..j元件,那么我可以选择第一个第[i + 1],并且是,我的对手可以选择或者第一第[i + 2]或最后一个[j-1],并且我希望在下次挑选时拥有最大数量,因此是外部最大值内的第一项。
第二个与上面类似,即如果我选择最后一个[j-1],对手选择第一个[i + 1]或者最后一个[j-2],我下次将其最大化。
现在,我在书里看到了递归作为
M(i,j) = Max{ Min{ Same } + vi, Min{ Same } + vj }
现在,为什么我在这里降到最低。这不等于说我第一次选择最大化,但是我必须选择第二次选择最小化。
我在做什么错? 谢谢。
所以基本上我在计算的是什么是我可以赢得的最大。但我需要找到我能赢的最低最高点。对? – Kraken
是的,这就是要点。 – Virgile