题面
题解(状态机)
f[i] [0] : 进行到第 i 天 并且 现在当前有股票买入
f[i] [1] : 进行到第 i 天 并且 现在当前没有股票买入的第一天 (i-1天刚卖出股票)
f[i] [2] : 进行到第 i 天 并且 现在当前没有股票买入的第 >=2 天
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n;
int w[N];
int f[N][3];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> w[i];
f[0][0] = f[0][1] = -INF; //初始到达不了的状态
f[0][2] = 0; //入口,初始状态
for (int i = 1; i <= n; i++) {
f[i][0] = max(f[i - 1][2] - w[i], f[i - 1][0]);
f[i][1] = f[i - 1][0] + w[i];
f[i][2] = max(f[i - 1][2], f[i - 1][1]);
}
cout << max(f[n][0], max(f[n][1], f[n][2])) << endl;
return 0;
}