#NOIP2009J1Q29. [NOIP 2009 普及组初赛] 第 29 题

[NOIP 2009 普及组初赛] 第 29 题

(最大连续子段和)

给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。 请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大, 在和最大的前提下还要求该子数列包含的元素个数最多, 并输出这个最大和以及该连续子数列中元素的个数。 例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

#include <iostream>
using namespace std;

int a[101];
int n,i,ans,len,tmp,beg;

int main(){
	cin >> n;
	for (i=1;i<=n;i++)
		cin >> a[i];
	tmp=0;
	ans=0;
	len=0;
	beg=【第1空】;
	for (i=1;i<=n;i++)
	{
		if (tmp+a[i]>ans)
		{
			ans=tmp+a[i];
			len=i-beg;
		}
		else if (【第2空】&&i-beg>len)
			len=i-beg;
		if (tmp+a[i]【第3空】)
		{
			beg=【第4空】;
			tmp=0;
		}
		else
			【第5空】;
	}
	cout << ans << " " << len << endl;
	return 0;
}

请填写【第3空】。

{{ input(1) }}