一道双向dp,差点超时^_^|||
/*pku 2593 */
#include <iostream>
using namespace std;
int a[100001];
__int64 s[100001],t[100001];
int main()
{
__int64 n,sum1,sum2,sum,p,q,i,j,k,b1,b2;
while(cin>>n&&n!=0)
{
for(k=0;k<n;k++)
cin>>a[k];
sum1=a[0],sum2=a[n-1];b1=0;b2=0;sum=sum1+sum2;
for(j=0;j<n-1;j++)
{
if(b1>0) b1+=a[j];
else b1=a[j];
if(b1>sum1)sum1=b1;
b2=0;sum2=a[n-1];
s[j]=sum1;
}
for(p=n-1;p>0;p--)
{
if(b2>0) b2+=a[p];
else b2=a[p];
if(b2>sum2)sum2=b2;
t[p]=sum2;
}
sum=s[0]+t[1];
for(i=1;i<=n-2;i++)
if(sum<s[i]+t[i+1])
sum=s[i]+t[i+1];
cout<<sum<<endl;
}
return 0;
}
浙公网安备 33010602011771号