有2個玩家遊戲,例如你有數字序列:2 -6 12
。可以說他們是用卡片寫的。收集積分遊戲
遊戲需要時間輪流。每回合玩家有義務從序列的開始或結束(不跳過)採取確切的一張卡片。遊戲在最後一張卡被佔用後結束。目標是以儘可能高的正分數完成比賽(分數是玩家所用卡牌上的所有數字的總和)。我們也知道兩個玩家都使用最佳策略(以最大化他們的收益)。我們必須說他們最終會達到什麼分數。
任何想法如何最優策略看起來像?
我的研究至今:
1-3 cards is trivial
{a}, no choice take a;
{a,b} take max(a,b) reduces to problem {a}
{a,b,c} take max(a,c) reduces to problem {a,b}
4 cards : {a,b,c,d}
if (a + max(c, min(b,d)) > d + max(b, min(a,c)))
take a;
else
take d;
如果我決定採取a
,我的對手取最大值(B,d)爲3卡戰略說,所以我要做的就是採取最大的c
(這在對手轉牌期間是「安全的」),並且從b
,d
卡變小,因爲對手會拿更大的一張。與d
孿生情況。但我不知道如何擴展(如果可能)n卡的情況。
任何線索?
對於長時間不活動感到抱歉,但我已經放棄了希望得到一個aswer。無論如何,讓我們來談談:這一個似乎waaaaaay比以前更好。首先我有一個投訴記憶(10^5)^ 2 = 10^10,這有點太高了。但我認爲我們可以解決它。 sum可以在每個sum [index] = sum [index-1] + cards [index]上面是int [N],現在我可以很容易地得到區間(a,b),使用一個減法1到b-1給出一個給(a,b) 但是不知道如何減少v(值?) 您能描述一些註釋並堅持使用之前使用的名稱,因爲它有點混亂)。 – abc
如果你告訴我你在updateValue的左邊做了什麼,因爲它們對我沒有意義,但事實上我有預感它可能會奏效。 – abc
就是這樣,我假設。非常感謝你所做的工作。 – abc