#include<stdio.h> /* PKU2593给出一串数字使得其中两个子段和最大 */ void MaxSum(int n,int m,int *a,int *b); int main(){ int a1[100002],a2[100002],n,b1[100002],b2[100002]; a1[0]=a2[0]=b1[0]=b2[0]=0; while(scanf("%d",&n),n){ int i; for(i=1;i<=n;i++){ scanf("%d",&a1[i]); a2[n+1-i]=a1[i]; } int max=-0x0ffffff; MaxSum(1,n,a1,b1); MaxSum(1,n,a2,b2); for(int ii=1;ii<n;ii++) if(max<b1[ii]+b2[n-ii]) max = b1[ii]+b2[n-ii]; printf("%d\n",max); } return 0; } void MaxSum(int n,int m,int *a,int *b){ int sum = -0x0ffffff,bb=-0x0ffffff; for(int i=n;i<=m;i++){ if(bb>0)bb+=a[i]; else bb=a[i]; if(bb>sum)sum=bb; b[i]=sum; //printf("%d ",b[i]); } //putchar('\n'); }