rqnoj-208-奥运火炬到厦门-dp

来源:互联网 发布:手机怎么发送淘宝链接 编辑:程序博客网 时间:2024/05/01 10:59

这道题目是把一个连续的串看成一个环。

那么除了原始的求最大字段和外。

还存在一种情况是前面的连续最大值,加上后面的连续最大值。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int    a[2000002];int st[1000010];int ed[1000010];int main(){    int n,i;    scanf("%d",&n);        for(i=0;i<n;i++)        {            scanf("%d",&a[i]);            a[i+n]=a[i];        }        int maxx;        maxx=-999999;        int ans;        ans=0;      //  int top=0;        //st=0;        for(i=0;i<n;i++)        {            ans+=a[i];            maxx=max(ans,maxx);            if(i==0)st[i]=a[i];            else st[i]=st[i-1]+a[i];            if(ans<0)            {                ans=0;            }        }        ans=0;        for(i=n-1;i>=0;i--)        {            ed[i]=ed[i+1]+a[i];        }        for(i=1;i<n;i++)        {            st[i]=max(st[i-1],st[i]);        }        for(i=n-1;i>=0;i--)ed[i]=max(ed[i+1],ed[i]);        for(i=0;i<n;i++)        {          // cout<<st[i]<<" "<<ed[i+1]<<endl;            maxx=max(maxx,st[i]+ed[i+1]);        }        cout<<maxx<<endl;    return 0;}


原创粉丝点击