有如下乙個雙人遊戲:n個正整數的序列放在乙個遊戲平台上,兩人輪流從序列的兩端取數,每次有數字被乙個玩家取走後,這個數字被從序列中去掉並累加到取走該數的玩家的得分中,當數取盡時,遊戲結束。以最終得分多者為勝。
編乙個執行最優策略的程式,最優策略就是使自己能得到在當前情況下最大的可能的總分的策略。你的程式要始終為兩位玩家執行最優策略。
輸入第1行包括乙個正整數n(2≤n≤100), 表示序列中正整數的個數。輸入第2行包含用空格分隔的n個正整數(1≤所有正整數≤200)。
只有一行,用空格分隔的兩個整數: 依次為先取數玩家和後取數玩家的最終得分。
通過遞迴拆分子問題(當前序列的最優解),需要注意的是需要記憶化陣列防止重複的計算量太大。
假設a是勝者的分數,b是敗者的分數 。序列表示為 [l,r]
[l,r]最優a是 [l,l] + [l+1,r]的最優b或者 [r,r] + [l,r-1]的最優b
[l,r]最優b是 [l+1,r]的最優a或者[l,r-1]的最優a
#include#include#include#includeusing namespace std;
int in[108], n;
pairma[108][108];
pairfunc1 ( int l, int r )
int main()
return 0;
}
計蒜客 取數遊戲
有如下乙個雙人遊戲 n個正整數的序列放在乙個遊戲平台上,兩人輪流從序列的兩端取數,每次有數字被乙個玩家取走後,這個數字被從序列中去掉並累加到取走該數的玩家的得分中,當數取盡時,遊戲結束。以最終得分多者為勝。編乙個執行最優策略的程式,最優策略就是使自己能得到在當前情況下最大的可能的總分的策略。你的程式...
計蒜客 乘法遊戲
乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標是使得分的和最小。例如,如果數是10 1 50 20 5,依次拿1 20 50,總分是10 1 50 ...
計蒜客 跳躍遊戲
給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 return true.a 3,2,1,0,4 return false.格式 第一行輸入乙個正整數n,接下來的一行,輸...