poj 2479 Maximum sum

来源:互联网 发布:怎样让淘宝店生意好 编辑:程序博客网 时间:2024/04/30 11:01

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

题目大意:给出一个数组,求两端不交叉的子序列和的最大值。我看到这道题只能想到n^2的程序。。。肯定超时,然后看的题解,唉。。但是用的时间还是比较多

AC代码:

#include<stdio.h>int main(){    int t;    int mm[50005];    int r[50005],l[50005];    scanf("%d",&t);    while(t--)    {        int n,sum=0,maxn=-99999999,i;        scanf("%d",&n);        for(i=0;i<n;i++)            scanf("%d",&mm[i]);        for(i=0;i<n;i++)        {            sum=sum>0?sum+mm[i]:mm[i];            if(sum>maxn)maxn=sum;            r[i]=maxn;        }        for(i=n-1,maxn=-99999999,sum=0;i>=0;i--)        {            sum=sum>0?sum+mm[i]:mm[i];            if(sum>maxn)maxn=sum;            l[i]=maxn;        }        maxn=-99999999;        for(i=0;i<n-1;i++)            if(r[i]+l[i+1]>maxn)maxn=r[i]+l[i+1];        printf("%d",maxn);        if(t)printf("\n");    }    return 0;}

AC截图:


0 0