http://acm.pku.edu.cn/JudgeOnline/problem?id=2593 类似2479,一串最大连续和分割成两部分。 #include <iostream> using namespace std; int a[100001],l[100001],r[100002]; int main() { int n,sum,max; while(1) { scanf("%d",&n); if(n==0) break; l[0] = -10001; sum = 0; for(int i=1;i<=n;++i) { scanf("%d",&a[i]); if(l[i-1] > a[i]+sum) l[i]=l[i-1]; else l[i]=a[i]+sum; sum+=a[i]; if(sum<0) sum=0; } r[n+1] = -10001; sum = 0; max = -200000; for( i=n;i!=0;--i) { if(r[i+1] > a[i]+sum) r[i]=r[i+1]; else r[i]=a[i]+sum; sum+=a[i]; if(sum<0) sum=0; if(l[i]+r[i+1]>max) max = l[i]+r[i+1]; } printf("%d/n",max); } return 0; }