现在的位置: 首页 > 综合 > 正文

HDU-1003最大连续子序和

2012年10月08日 ⁄ 综合 ⁄ 共 481字 ⁄ 字号 评论关闭

这题的思路很简单,只要连续相加的和大于或等于零,就一直加下去,如果在第i-1项小于零,把sum的值赋值为第i个序列的值。

并记录它的下标,就可以了。

#include<stdio.h>
#define N -10000000
int main()
{   
	int t,n,j,k,beg,end,cas=1;
	long sum,max;
	int a[100001];
	scanf("%d",&t);
     while(t--){
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
		 scanf("%d",&a[i]);
	    }
	   sum=0,max=N,k=1,j=n;
	   for(int i=1;i<=n;i++){
		if(sum>=0){
		 sum+=a[i];
		  j=i;
		}
		else{
		 sum=a[i];
		 k=i;
		 j=i;
		}
		 if(sum>=max){
		    beg=k,end=j;
		    max=sum;		
	    }
	}
	 printf("Case %d:\n",cas++);
	 printf("%ld %d %d\n",max,beg,end);
	 if(t) printf("\n");  //没注意这个老是pe啊!,改了后果断A了。 
    }
    return 0;
}

抱歉!评论已关闭.