poj 2181
题意:最大子序列,奇数项加,偶数项减。
dp解
代码:
#include<iostream>
#include<fstream>
using namespace std;
int dp[150001][2][2];
int n;
int a[150001];
void read(){
// ifstream cin("in.txt");
int i,j,k;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
dp[1][0][0]=0;
dp[1][0][1]=-9999999;
dp[1][1][1]=a[1];
dp[1][1][0]=-9999999;
for(i=2;i<=n;i++)
{
dp[i][0][0]=max(dp[i-1][0][0],dp[i-1][1][0]);
dp[i][0][1]=max(dp[i-1][0][1],dp[i-1][1][1]);
dp[i][1][0]=max(dp[i-1][0][1],dp[i-1][1][1])-a[i];
dp[i][1][1]=max(dp[i-1][0][0],dp[i-1][1][0])+a[i];
}
cout<<max(max(dp[n][0][0],dp[n][0][1]),max(dp[n][1][0],dp[n][1][1]))<<endl;
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号