P2642 求调
  • 板块灌水区
  • 楼主W_SUN
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/3/5 20:10
  • 上次更新2023/10/28 07:12:32
查看原帖
P2642 求调
341801
W_SUN楼主2022/3/5 20:10
#include <bits/stdc++.h>
#define ll long long
#define Max 10000007
#define Min -10000000000000007
using namespace std;
int n;
ll a[Max];
ll sum;
ll ans1=Min,ans2,ans3=Min;
ll f[Max];
ll g[Max];
//1 2 3 4 5
//sum=1 ans=1 f[2]=1 | 1
//sum=3 ans=3 f[3]=3 | 1 2
//sum=6 ans=6 f[4]=6 | 1 2 3
//-------
//sum=3 ans=3 g[2]=3 | 3 
//sum=7 ans=7 g[3]=7 | 3 4
//sum=12 ans=12 g[4]=12 | 3 4 5
//-------
//1 3 | 1 2 3
//1 2 3 4 | 1 2 3 4
//1 2 3 3 4 5 | 1 2 3 4 5
//1 2 3 4 5 3 4 5 6 7 | 1 2 3 4 5 6 7
//-------
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(int i=1;i<=n-2;i++){
		if(sum<0){
			sum=0;
		}
		sum+=a[i];
		ans1=max(ans1,sum);
		f[i+1]=ans1;
	}
	sum=0;
	ans1=Min;
	for(int i=3;i<=n;i++){
		if (sum < 0)
		{
			sum = 0;
		}
		sum += a[i];
		ans1 = max(ans1, sum);
		g[i - 1] = ans1;
	}
	for(int i=2;i<=n-1;i++){
		ans3=max(g[i]+f[i],ans3);
	}
	cout<<ans3;
	return 0;
}

RT,出错原因是会有重叠计算,但是不知道怎样处理

2022/3/5 20:10
加载中...