#include <iostream> using namespace std; #define MAX 150001 int A[MAX]; int main() { int n; int M[MAX], N[MAX]; scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &A[i]); //dp // M[i]: 前i个元素中有奇数个元素的最大值 // N[i]: 前i个元素中有偶数个元素的最大值 //维护前i, i+1,...个元素中奇数个的最大值,与偶数个的最大值 M[1] = 0, N[1] = A[1]; for(int i = 1; i <= n-1; ++i) { M[i+1] = max(M[i], N[i]-A[i+1]); N[i+1] = max(N[i], M[i]+A[i+1]); } printf("%d/n", max(M[n], N[n])); return 0; } //上程序的节省空间版本: #include <iostream> using namespace std; #define MAX 150001 int A[MAX]; int main() { int n; int M, N; scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &A[i]); //dp // M[i]: L[i]中有奇数个元素的最大值 // N[i]: L[i]中有偶数个元素的最大值 M = 0, N = A[1]; for(int i = 1; i <= n-1; ++i) { int MTmp = M; M = max(M, N-A[i+1]); N = max(N, MTmp+A[i+1]); } printf("%d/n", max(M, N)); return 0; }