美文网首页
2018-07-27-POJ2479

2018-07-27-POJ2479

作者: termanary | 来源:发表于2018-07-27 22:33 被阅读0次

题目:POJ-2479
代码:

#include<stdio.h>

#define N 50000

int main()
{
    int t,n,i,re,a[N],be[N],en[N];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d",a+i);
        for(i=1,be[0]=a[0];i<n;i++)
            be[i]=be[i-1]<0?a[i]:be[i-1]+a[i];
        for(i=n-2,en[n-1]=a[n-1];i>=0;i--)
            en[i]=en[i+1]<0?a[i]:en[i+1]+a[i];
        for(i=1,re=0;i<n;i++)
        {
            if(be[i]>be[re])
                re=i;
            else
                be[i]=be[re];
        }
        for(i=n-2,re=n-1;i>=0;i--)
        {
            if(en[i]>en[re])
                re=i;
            else
                en[i]=en[re];
        }
        for(i=1;i<n;i++)
            be[i-1]+=en[i];
//以下这行原本忘记n--了,以为不会有事,没想到WA了
//be[n-1]是以a[n-1]为结尾的最大连续和,其余表示以i为
//分界线的最值.
//特例:除了最后一个元素,其余元素均为负值
        for(i=1,re=0,n--;i<n;i++)
            re=be[re]>be[i]?re:i;
        printf("%d\n",be[re]);
    }
    return 0;
}


相关文章

网友评论

      本文标题:2018-07-27-POJ2479

      本文链接:https://www.haomeiwen.com/subject/doknmftx.html