您的位置:首页 > 其它

hdu1231最大连续子序列

2013-08-04 19:02 441 查看
如题,求最大连续子序列和

注意的是,全为负的情况比较特殊

直接用1003的代码,改改也就过了

这里用第三组数据演示一下算法的过程。

i012345
a[i]5-83250
《《maxsum=temsum=5;start=end=0;

i=1

temsum=5-8=-3;

i=2

temsum<0;

start=2;temsum=3;maxsum=5

i=3

temsum>0; temsum=3+2=5,maxsum=5,不变。

i=4

temsum>0;temsum=5+5=10;

temsum==10>maxsum==5;

maxsum=10,start=2,end=4;

i=5

temsum>0;temsum=10+0=10;

start,end,maxsum 不做修改

所以输出maxsum:10, a[2]:3, a[4]:5

#include <iostream>
using namespace std;
int a[100010];
bool flag;
int main()
{
	int n;
	while(scanf("%d",&n))
	{
		if(!n)
			break;
		bool flag=true;
		for(int i =0;i<n;i++)
		{
			scanf("%d",&a[i]);
			if(a[i]>=0)
				flag=false;
		}
		if(flag)
		{
			printf("0 %d %d\n",a[0],a[n-1]);
			continue;
		}
		int maxsum=a[0],tempsum=a[0];
		int start=0,end=0, itemp=0;
		for(int i=1;i<n;i++)
		{
			if(tempsum<0)
			{
				tempsum=0;
				itemp=i;
			}
			tempsum+=a[i];
			if(tempsum>maxsum)
			{
				maxsum=tempsum;
				start=itemp;
				end=i;
			}
		}
		printf("%d %d %d\n",maxsum,a[start],a[end]);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: