UESTC - 1357 前缀和维护

有点小细节需要注意
sum实时维护有效的连续和

/*H E A D*/
ll dp1[maxn],dp2[maxn];
ll a[maxn],n,sum;
int main(){
	while(~iin(n)){
		rep(i,1,n) a[i]=read();
		dp1[0]=-(1ll<<62);dp2[n+1]=dp1[0];
//		rep(i,1,n) dp1[i]=max(dp1[i-1]+a[i],a[i]);//a[i]无论如何都加上去了 
//		rrep(i,n,1) dp2[i]=max(dp2[i+1]+a[i],a[i]);
		sum=0;
		rep(i,1,n){
			if(sum<0) sum=0;
			sum+=a[i];
			dp1[i]=max(dp1[i-1],sum);
		}
		sum=0;
		rrep(i,n,1){
			if(sum<0)sum=0;
			sum+=a[i];
			dp2[i]=max(dp2[i+1],sum);
		}
		ll ans=1ll<<63;ans=-ans;
		rep(i,2,n-1) ans=max(ans,dp1[i-1]+dp2[i+1]);
		println(ans);
	}
	return 0;
}
posted @ 2018-02-10 01:28  Caturra  阅读(130)  评论(0)    收藏  举报