题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fccdc4c99a9c5aeeb14bfae26e1e2653.png)
class Solution {
public:
bool PredictTheWinner(vector<int>& a) {
int n=a.size(),dp[n][n];
for(int i=0;i<n;++i) dp[i][i]=a[i];
for(int i=0;i<n-1;++i) dp[i][i+1]=max(a[i],a[i+1])-min(a[i],a[i+1]);
for(int len=3;len<=n;++len){
for(int i=0,j;i+len-1<n;++i){
j=i+len-1;
dp[i][j]=max(a[i]-dp[i+1][j],a[j]-dp[i][j-1]);
}
}
return dp[0][n-1]>=0;
}
};
class Solution {
public:
bool PredictTheWinner(vector<int>& a) {
int n=a.size(),dp[n][n][2];
for(int i=0;i<n;++i) dp[i][i][0]=a[i],dp[i][i][1]=0;
for(int i=0;i<n-1;++i) dp[i][i+1][0]=max(a[i],a[i+1]),dp[i][i+1][1]=min(a[i],a[i+1]);
for(int len=3;len<=n;++len){
for(int i=0,j;i+len-1<n;++i){
j=i+len-1;
int sum1=a[i]+dp[i+1][j][1],sum2=a[j]+dp[i][j-1][1];
if(sum1>=sum2) dp[i][j][0]=sum1,dp[i][j][1]=dp[i+1][j][0];
else dp[i][j][0]=sum2,dp[i][j][1]=dp[i][j-1][0];
}
}
return dp[0][n-1][0]>=dp[0][n-1][1];
}
};