- 使用dp数组存储当前位置的前一个偶数值位置和奇数值位置的值。
- 得到当前位置值的奇偶性,然后利用dp数组得到当前位置从偶数值位置转移来的值,从奇数值位置转移来的值。取最大值作为当前位置的值。并用这个值判断是否要更新dp数组值。
- 取所有位置的最大值返回。
可能这样讲还是不太清楚,多看跟着写代码就懂了。
class Solution {
public:
long long maxScore(vector<int>& nums, int x) {
long long res = nums[0];
vector<long long> dp(2, INT_MIN);
dp[nums[0]%2] = nums[0];
for(int i=1; i<nums.size();++i)
{
int parity = nums[i]%2;
long long cur = max(dp[parity]+nums[i], dp[1-parity]-x+nums[i]);
res = max(res, cur);
dp[parity] = max(dp[parity], cur);
}
return res;
}
};