https://leetcode.com/problems/predict-the-winner/description/
一开始就想错了,应该是从短到长递推
dp[i][j]表示当前局面下,最大得分。
class Solution {
public:
bool PredictTheWinner(vector<int>& nums) {
if (nums.size() <= 2) return true;
vector< vector<int> > dp( nums.size(), vector<int>(nums.size(), 0) );
vector<int> sum (nums.size(), 0);
sum[0] = nums[0];
for (int i = 1; i < nums.size(); i++)
sum[i] = sum[i-1] + nums[i];
for (int i = nums.size()-1; i >= 0; i--)
for (int j = i; j < nums.size(); j++) {
if (i == j)
dp[i][j] = nums[i];
else {
dp[i][j] = max(sum[j-1] - (i?sum[i-1]:0) - dp[i][j-1] + nums[j] , sum[j] - sum[i] - dp[i+1][j] + nums[i]);
}
}
return dp[0][nums.size()-1] >= sum[nums.size()-1] - dp[0][nums.size()-1];
}
};