LeetCode 1911. 最大子序列交替和
状态机DP
typedef long long LL;
const int N = 1e5 + 10;
class Solution {
public:
LL f[N][2]; //f[i][0]表示前i个选偶数个的最大和,f[i][1]表示前i个选奇数个的最大和
long long maxAlternatingSum(vector<int>& nums) {
int n = nums.size();
f[0][0] = 0;
for(int i = 1; i <= n; i ++)
{
f[i][0] = max(f[i - 1][0], f[i - 1][1] + nums[i - 1]);
f[i][1] = max(f[i - 1][1], max(0LL, f[i - 1][0] - nums[i - 1]));
}
return max(f[n][0], f[n][1]);
}
};