【cdoj 1357】柱爷与最大区间和

来源:互联网 发布:定位技术知乎 编辑:程序博客网 时间:2024/06/06 02:51

连续一段的最大区间和递推方程 f [ i ] = max( f [ i - 1 ] + a [ i ]  , a [ i ] )O(n)复杂度

前后做两次再做两次计算不连续的最大区间和

#include<cstdio>#include<cstring>#include<iostream>#define maxn 500020using  namespace std;int n,a[maxn],sum[maxn];int f[maxn],g[maxn],ff[maxn];int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",a+i);sum[i]=sum[i-1]+a[i];}int last=0;for(int i=1;i<=n;i++){f[i]=max(f[i],sum[i]-last);last=min(last,sum[i]);}last=-1e9;for(int i=1;i<=n;i++){ff[i]=max(f[i-1],last);last=max(last,f[i-1]);}memset(sum,0,sizeof(sum));for(int i=n;i>=1;i--){sum[i]=sum[i+1]+a[i];}int ans=-1e9;last=0;for(int i=n;i>=1;i--){g[i]=max(g[i],sum[i]-last);last=min(last,g[i+1]);ans=max(ans,g[i]+ff[i]);}printf("%d",ans);return 0;}


0 0
原创粉丝点击