//初始状态(入口)转移到手中无货的第>=2天 //最终状态(出口)可能从手中无货的第一天转移过来,或者从手中无货的第>=2天 //f[i,0]表示走到第i天,且位于手中有货的状态 //f[i,1]表示走到第i天,且位于手中无货的第一天的状态 //f[i,2]表示走到第i天,且位于手中无货的第>=2天的状态 #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 100010, INF = 0x3f3f3f3f; int n; int w[N]; int f[N][3]; int main() { scanf("%d", &n); for (int i = 1; i <= n; i ++ ) scanf("%d", &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][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 ", max(f[n][1], f[n][2])); return 0; }