先求前缀和,在前缀和中取不小于零的序列,求该序列的最大值有错吗?
查看原帖
先求前缀和,在前缀和中取不小于零的序列,求该序列的最大值有错吗?
139620
lp2018楼主2021/6/5 10:26

大佬们,思路是:

  1. 先求序列的前缀和;
  2. 前缀和中遍历所有连续不小于零的序列,并求和;
  3. 求所有序列的最大值; 不知道问题出在哪里?思路应该没错吧 代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> sum;
int main(){
	int n,ans = 0,len = 0;
	scanf("%d",&n);
	sum.push_back(0);
	for(int i = 1;i <= n;i++){
		int tmp;
		scanf("%d",&tmp);
		ans = max(tmp,ans);
		len += tmp;
		sum.push_back(len);//存储前缀和
	}
	int st = 0,end = -1;
	bool st_ = false;
	for(int i = 1;i <= n;i++){
		if(sum[i] >= 0 && st_ == false){//寻找前缀和中不小于零序列中的起始位置
			st = i - 1;
			st_ = true;
		}
		if(st_ == true && sum[i] < 0){//序列中的结束位置
			int tmp = sum[i - 1] - sum[st];
			ans = max(ans,tmp);//比较去最大值
			st_ = false; 
		}
	}
	cout << ans << endl;
	return 0;
} 
2021/6/5 10:26
加载中...