亞歷克斯和李用幾堆石子在作遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles[i] 。css
遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,因此沒有平局。數組
亞歷克斯和李輪流進行,亞歷克斯先開始。 每回合,玩家從行的開始或結束處取走整堆石頭。 這種狀況一直持續到沒有更多的石子堆爲止,此時手中石子最多的玩家獲勝。spa
假設亞歷克斯和李都發揮出最佳水平,當亞歷克斯贏得比賽時返回 true ,當李贏得比賽時返回 false 。code
這道題我本身作出來得!(滿臉寫着驕傲!)blog
咱們用dp[i][j]來保存數組nums[i...j]第一我的先取獲得的sum與第二我的的差值,這樣咱們就有遞推關係:遊戲
bool stoneGame(vector<int>& piles) { int n=piles.size(); vector<vector<int>> dp(n,vector<int>(n,0)); for(int i=0;i<n;i++){ dp[i][i]=piles[i]; } for(int len=1;len<n;len++){ for(int start=0;start<n-len;start++){ dp[start][start+len]=max(piles[start]-dp[start+1][start+len],piles[start+len]-dp[start][start+len-1]); } } return dp[0][n-1]>0; }