状态机dp
作者:
Lemmon_kk
,
2021-04-01 16:39:18
,
所有人可见
,
阅读 415
// 手中有货
// 手中无货的第一天
// 手中无货胡第二天
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n, w[N];
int f[N][3];
// f[i][0] = max(f[i - 1][0], f[i - 1][2] - w[i]);
// f[i][1] = f[i - 1][0] + w[i];
// f[i][2] = max(f[i - 1][2], f[i - 1][1]);
int main(){
scanf("%d", &n);
for(int i = 1;i <= n;i ++ ) scanf("%d", &w[i]);
memset(f, -1, sizeof f);
f[0][0] = -1, f[0][1] = -1, f[0][2] = 0;
for(int i = 1;i <= n;i ++ ){
f[i][0] = max(f[i - 1][0], f[i - 1][2] - w[i]);
f[i][1] = f[i - 1][0] + w[i];
f[i][2]= max(f[i - 1][2], f[i - 1][1]);
}
printf("%d\n", max(f[n][1], f[n][2]));
return 0;
}