6931. 访问数组中的位置使分数最大
题意
给你一个数组,初始你位于下标 1 处,你可以往后跳到数组任一下标,但不能往前跳。跳到哪个位置,即可获得下标对应的分数,但如果当前下标的数与跳之前下标的数奇偶性不同,那么你会失去分数 x。询问你能获得的最大分数?
思路
一眼动态规划,那么问题在于怎么规划?
代码
#define ll long long
class Solution {
public:
long long maxScore(vector<int>& a, int x) {
int n = a.size();
ll even, odd;
even = a[0] + ((a[0] % 2 == 0) ? 0 : -x);
odd = a[0] + ((a[0] % 2 == 0) ? -x : 0);
for(int i = 1; i < n; ++ i){
if(a[i] % 2){
odd = a[i] + max(even - x, odd);
}else{
even = a[i] + max(even, odd - x);
}
}
return max(odd, even);
}
};