hdu1231最大连续子序列

如题,求最大连续子序列和

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

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

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

i 0 1 2 3 4 5
a[i] 5 -8 3 2 5 0


《《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;
}



posted on 2013-08-04 19:02  果冻虾仁  阅读(96)  评论(0编辑  收藏  举报

导航