POJ 2593 dp
来源:互联网 发布:js过滤输入法表情符号 编辑:程序博客网 时间:2024/05/02 09:12
//11062096c00h00g2479Accepted984K438MSG++859B2012-11-29 14:25:42//分成两段left和right//left[i]表示包含aa[i]的最大连续字段和,right[i]表示从后向前包含aa[i]的最大字段和//由于left[i]并不能表示1-i的最大字段和,故需要设计一个变量ll来表示左端的最大值//错误原因; 见代码描述 #include<stdio.h>#include<stdlib.h>#include<limits.h>#include<algorithm>using namespace std;int n;int aa[100005];int left[100005];int right[100005];int main(){ while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=1;i<=n;i++){ scanf("%d",&aa[i]); left[i]=right[i]=0; } left[0]=right[n+1]=0; //正向扫描 for(int i=1;i<=n;i++){ left[i]=max(aa[i],left[i-1]+aa[i]); } //逆向扫描 for(int i=n;i>=1;i--){ right[i]=max(aa[i],right[i+1]+aa[i]); } int res=-INT_MAX; int ll=-INT_MAX; //这儿写成<=n WA了一次,因为题目要求必须分割成两段 for(int i=1;i<n;i++){ ll=max(ll,left[i]); res=max(res,ll+right[i+1]); } printf("%d\n",res); } //system("pause"); return 0;}