动规
#include<stdio.h>
#define INF -999999999
int arr[110005],arr_1[110005],arr_2[110005];
void get_arr(int n)
{
int sum=0,i,tmp=INF;
for(i=0;i<n;i++)
{
sum+=arr[i];
if(sum>tmp)
tmp=sum;
arr_1[i]=tmp;
if(sum<0)
sum=0;
}
}
int get_rev_result(int n)
{
int sum=0,i,tmp=INF,tmp1=INF;
for(i=n-1;i>=0;i--)
{
sum+=arr[i];
if(sum>tmp)
tmp=sum;
arr_2[i]=tmp;
if(sum<0)
sum=0;
if(i!=0) //至关重要,在这里卡了我一两个小时,注意不要让下标取到负的
if(arr_2[i]+arr_1[i-1]>tmp1)
tmp1=arr_2[i]+arr_1[i-1];
}
return tmp1;
}
int main()
{
int n;
while(scanf("%d",&n))
{
if(n==0)
break;
int i;
for(i=0;i<n;i++)
scanf("%d",arr+i);
get_arr(n);
printf("%d\n",get_rev_result(n));
}
return 0;
}