poj 2479 Maximum sum

题目链接http://poj.org/problem?id=2479

题目分类:动态规划

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;

int a[50000+100];
int s[50000+100];

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);

    int t,n,sum,tmp,ans;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        sum=0;
        tmp=-0x3f3f3f3f;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
            if(sum>tmp)
                tmp=sum;
            s[i]=tmp;
            if(sum<0)
                sum=0;
        }

        sum=0;
        tmp=-0x3f3f3f3f;
        ans=-0x3f3f3f3f;
        for(int i=n;i>1;i--)
        {
            sum+=a[i];
            if(sum>tmp)
                tmp=sum;
            if(ans<s[i-1]+tmp)
                ans=s[i-1]+tmp;
            if(sum<0)
                sum=0;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

posted @ 2015-11-08 15:23  Gssol  阅读(138)  评论(0编辑  收藏  举报