一道双向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;
}

posted on 2007-09-21 22:56  xmx  阅读(195)  评论(0)    收藏  举报

导航