HDU-1003最大连续子序和

来源:互联网 发布:淘宝违禁词在线查询 编辑:程序博客网 时间:2024/05/23 01:58

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

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

#include<stdio.h>#define N -10000000int 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;}


原创粉丝点击