POJ-2479-Maximum sum

来源:互联网 发布:网络导流是什么意思 编辑:程序博客网 时间:2024/04/30 15:36

这个题要求求出一个序列里面的2个子区间的最大连续和,

思路:

分别以left[i],right[i]分别表示i左边和i后边的最大子区间和,然后进行遍历取最大值即可

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=50001;int n,a[maxn],l[maxn],r[maxn];int main(){    int T;    scanf("%d",&T);    while(T--)    {scanf("%d",&n);for(int i=1;i<=n;i++)    scanf("%d",&a[i]);l[1]=a[1];for(int i=2;i<=n;i++)    if(l[i-1]<0)l[i]=a[i];    elsel[i]=l[i-1]+a[i];for(int i=2;i<=n;i++)    l[i]=max(l[i],l[i-1]);r[n]=a[n];for(int i=n-1;i>=1;i--)    if(r[i+1]<0)r[i]=a[i];    elser[i]=r[i+1]+a[i];for(int i=n-1;i>=1;i--)    r[i]=max(r[i],r[i+1]);int ans=-1<<29;for(int i=2;i<=n;i++)    ans=max(ans,l[i-1]+r[i]);printf("%d\n",ans);    }    return 0;}


原创粉丝点击