这题难在状态表示:dp[i][j]表示从i到j的数组中,能获得的与对方的最大差值。如果你选了nums[i],那么对方就要从(i+1,j)中选,如果你选了nums[j],对方就要从(i,j-1)中选择。
dp[i][i]=nums[i]
class Solution {
public:
bool PredictTheWinner(vector<int>& nums) {
int n=nums.size();
int dp[n+1][n+1];
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
dp[i][i]=nums[i];
}
for(int i=n-1;i>=0;i--)
{
for(int j=i+1;j<n;j++)
{
dp[i][j]=max(nums[i]-dp[i+1][j],nums[j]-dp[i][j-1]);
}
}
return dp[0][n-1]>=0;
}
};