noip2009初赛-最大连续子段和

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


var
	a:array[1..100] of integer;
	n,i,ans,len,tmp,beg:integer;
begin
	read(n);
	for i:=1 to n do read(a[i]);
	tmp:=0;
	ans:=0;
	len:=0;
	beg:=0;
	for i:=1 to n do
	begin
		if tmp+a[i]>ans then
		begin
			ans:=tmp+a[i];
			len:=i-beg;
		end
		else if (tmp+a[i]=ans) and (i-beg>len) then len:=i-beg;
		if tmp+a[i]<0 then
		begin
			beg:=i;
			tmp:=0;
		end
		else inc(tmp,a[i]);
	end;
	writeln(ans, ' ', len);
end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值