dp
ldp[i]表示以i为结尾元素的最大值;
rdp[i]表示取后i个元素之中最大连续子串的和;
ans=max(ldp[i]+rdp[i+1]) (0<i<n);
#include<iostream>
#include<cstdio>
#include<algorithm>
#define MAX 100055
using namespace std;
int n;
int a[MAX];
int ldp[MAX],rdp[MAX];
int main()
{
int i,j;
while(cin>>n&&n)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
ldp[1]=a[1];
for(i=2;i<=n;i++)
{
ldp[i]=max(a[i],ldp[i-1]+a[i]);
}
int M=-1010,sum=0;
for(i=n;i;i--)
{
sum+=a[i];
if(M<sum)
M=sum;
if(sum<0)
sum=0;
rdp[i]=M;
}
int ans=-2010;
for(i=1;i<n;i++)
{
ans=max(ans,ldp[i]+rdp[i+1]);
}
printf("%d\n",ans);
}
return 0;
}