leetcode第109场双周赛

发布时间 2023-07-23 23:18:04作者: Qiansui

题目传送门

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);
	}
};