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;
}

posted on 2011-05-01 16:52  宇宙吾心  阅读(393)  评论(0)    收藏  举报

导航