classSolution{public:boolstoneGame(vector<int>&piles){constintn=piles.size();// dp[i][j] := max stones you can get more than your opponent in piles[i..j]vector<vector<int>>dp(n,vector<int>(n));for(inti=0;i<n;++i)dp[i][i]=piles[i];for(intd=1;d<n;++d)for(inti=0;i+d<n;++i){constintj=i+d;dp[i][j]=max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1]);}returndp[0][n-1]>0;}};
classSolution{publicbooleanstoneGame(int[]piles){finalintn=piles.length;// dp[i][j] := max stones you can get more than your opponent in piles[i..j]int[][]dp=newint[n][n];for(inti=0;i<n;++i)dp[i][i]=piles[i];for(intd=1;d<n;++d)for(inti=0;i+d<n;++i){finalintj=i+d;dp[i][j]=Math.max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1]);}returndp[0][n-1]>0;}}
classSolution:defstoneGame(self,piles:List[int])->bool:n=len(piles)# dp[i][j] := max stones you can get more than your opponent in piles[i..j]dp=[[0]*nfor_inrange(n)]fori,pileinenumerate(piles):dp[i][i]=pilefordinrange(1,n):foriinrange(n-d):j=i+ddp[i][j]=max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1])returndp[0][n-1]>0