这题的思路很简单,只要连续相加的和大于或等于零,就一直加下去,如果在第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; }