考慮一行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