排成一條線的硬幣博弈問題

2021-07-01 23:29:37 字數 665 閱讀 6684

面值為正數的硬幣放置成一排,玩家1和玩家2輪流拿走硬幣,規定每個玩家在拿硬幣時,只能拿走最左或最右的硬幣。 例如: 硬幣面值與排列為:1,2,3,4,5,現在輪到玩家1拿硬幣。 在當前狀態下,玩家1只能拿走1或5, 如果玩家1拿走1,則排列變為2,3,4,5,那麼接下來玩家2可以拿走2或5,然後繼續輪到玩家1拿硬幣… 如果玩家1拿走5,則排列變為1,2,3,4,那麼接下來玩家2可以拿走1或4;然後繼續輪到玩家1拿硬幣… 遊戲按照這個規則進行,直到所有的硬幣被拿完,每個玩家獲得的分數是各自拿走硬幣的總和。 遊戲勝負的規定: 如果玩家1最後獲得的分數大於玩家2,則玩家1獲勝; 如果玩家2最後獲得的分數大於玩家1,則玩家2獲勝; 因為玩家1先拿硬幣,所以如果最後兩人獲得分數一樣則玩家2獲勝; 給定乙個陣列arr,表示硬幣的面值和排列狀況,請返回最終獲勝者的分數。 例子: arr=[8,7,5,3] 玩家1將獲勝,分數為13 所以返回13 arr=[1,9,1] 玩家2將獲勝,分數為9 所以返回9

class solution 

/*** 得到硬幣博弈問題的獲勝分值

* 輸入:代表硬幣排列情況的陣列arr

* 返回:硬幣博弈問題的獲勝分值

*/int getwinvalue(vector

arr, int len)

};

本題中dp陣列應該不是必須的吧?

排成一條線的紙牌博弈問題

問題描述 給定乙個整型陣列,代表數值不同的紙牌排成一條線。玩家a和玩家b依次拿走每張紙牌,規定玩家a先拿,玩家b後拿。但是每個玩家每次只能拿走最左或者最右的紙牌,玩家a和b都絕頂聰明,請返回最後獲勝者的分數。解答 定義乙個函式 func int arr 用來表示最優結果,那麼針對第乙個人是先拿第一張...

動態規劃 排成一條線的紙牌博弈問題

題目 給定乙個整型陣列arr,代表數值不同的紙牌排成一條線。玩家a和玩家b依次拿走每張紙牌,規定玩家a先拿,玩家b後拿,但是每個玩家每次只能拿走最左或最右的紙牌,玩家a和玩家b都絕頂聰明。請返回最後獲勝者的分數。舉例 arr 1,2,100,4 開始時玩家a只能拿走1或4。如果玩家a拿走1,則排列變...

動態規劃 排成一條線的紙牌博弈等問題

有乙個整型陣列a,代表數值不同的紙牌排成一條線。玩家a和玩家b依次拿走每張紙牌,規定玩家a先拿,玩家b後拿,但是每個玩家每次只能拿走最左或最右的紙牌,玩家a和玩家b都絕頂聰明,他們總會採用最優策略。請返回最後獲勝者的分數。給定紙牌序列a及序列的大小n,請返回最後分數較高者得分數 相同則返回任意乙個分...