题意:Array b 有n-1个数,选择从某个数开始,每次- + - + - + , 求最大连续子段和
思路:
1.对于每个数正负号确定的情况下,出门搜:DP求解最大连续子段和
2.那么序列B的每个数无非是 + or - , 求出相应的数组求最大连续zui段和
#include<bits/stdc++.h>
#define PI acos(-1.0)
#define pb push_back
using namespace std;
typedef long long ll;
const int N=1e5+5;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f;
ll a[N];
ll b[N];
ll c[N];
int main(void){
int n;
cin >>n;
for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
for(int i=1;i<=n-1;i++){
b[i]=abs(a[i]-a[i+1]);
if(i%2==0) b[i]=-b[i] ;
}
for(int i=1;i<=n-1;i++)
c[i]=-b[i];
ll mx=0,sum=0;
for(int i=1;i<=n-1;i++){
sum+=b[i];
if(sum<0) sum=0;
mx=max(mx,sum);
}
sum=0;
for(int i=1;i<=n-1;i++){
sum+=c[i];
if(sum<0) sum=0;
mx=max(mx,sum);
}
cout << mx << endl;
return 0;
}