PKU POJ 2479 Maximum sum 最大连续子序列和

这里子序列不能为空,至少要一个,特殊一点。

View Code
#include <iostream>
#include <stdio.h>
using namespace std;

__int64 n,a[50005],dpl[50005],dpr[50005];
int main()
{
    __int64 T,i,sum,mmax;
    scanf("%I64d",&T);
    while (T--)
    {
        scanf("%I64d",&n);
        for (i=0;i<n;++i)
            scanf("%I64d",&a[i]);
        sum=dpl[0]=a[0];
        for (i=1;i<n;++i)
        {
            dpl[i]=dpl[i-1];
            sum+=a[i];
            if (dpl[i]<sum)
                dpl[i]=sum;
            if (sum<a[i])
                sum=a[i];
            if (dpl[i]<sum)
                dpl[i]=sum;
        }
        sum=dpr[n-1]=a[n-1];
        for (i=n-2;i>=0;--i)
        {
            dpr[i]=dpr[i+1];
            sum+=a[i];
            if (dpr[i]<sum)
                dpr[i]=sum;
            if (sum<a[i])
                sum=a[i];
            if (dpr[i]<sum)
                dpr[i]=sum;
        }
        for (i=0,mmax=0x8000000000000000;i<n-1;++i)
            if (dpl[i]+dpr[i+1]>mmax)
                mmax=dpl[i]+dpr[i+1];
        printf("%I64d\n",mmax);
    }
    return 0;
}

 

posted on 2013-03-30 20:20  Deller  阅读(136)  评论(0)    收藏  举报

导航