タイトル説明
ゲーム内のいくつかの石を持つアレックスとリー・ヒープ。重ね偶数石行には、石片を各パイル正の整数ですpiles[i]
。
誰が勝者を決定するための最も石でゲームを持っています。石の合計数には引き分けがない、奇妙です。
アレックスとリーはターンを取る、アレックスが最初に開始します。各ターンでは、プレイヤーは、行の先頭や末尾から石の全体の杭を奪います。この状況は、石の勝利の手のほとんどを、その時点でこれ以上の石の山、まで続きました。
アレックスがゲームに勝つために戻ったとき、アレックス・リーの仮定は、最高のレベルを再生し、true
リーは試合に勝つために戻ったとき、false
。
输入:[5,3,4,5]
输出:true
問題解決のアイデア:この質問に対する解決策(とさえコード)と486個の質問の髪と同じ。「ギャングlabuladong何ここを見てゲームの一般的な問題解決するために、動的なプログラミングのアイデアをボタン」。
参照コード
class Solution {
public:
bool stoneGame(vector<int>& piles) {
int length = piles.size();
if(length <= 1)
return true;
vector<vector<int> > dp(length, vector<int>(length, 0));
for(int i = 0; i < length; i++)
dp[i][i] = piles[i];
for(int i = length-2; i >= 0; i--){
for(int j = i+1; j < length; j++){
dp[i][j] = max(piles[i] - dp[i+1][j], piles[j] - dp[i][j-1]);
}
}
return dp[0][length-1] >= 0;
}
};