题意:很容易理解不用过多的解释。。。
分析:因为要求是连续的,所以只要它这左边的大于零就相加,然后以此类推,难点是记录序列的起点和终点,具体看我的代码吧!!
代码实现:
#include<stdio.h> #include<string.h> int a[100001]; int main() { int T,n,i,j,sum,max,f,r,f1; scanf("%d",&T); for(j=1;j<=T;j++) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); f=f1=r=1; sum=a[1];max=a[1]; for(i=2;i<=n;i++) { if(sum>=0)//a[i]左边的序列大于零就相加 { sum=sum+a[i]; if(sum>max) { f=f1; r=i; max=sum; } } else//小于零就不相加 { sum=a[i]; if(a[i]>=0) f1=i; if(max<sum) { f=r=i; f1=i; max=sum; } } } printf("Case %d:\n",j); printf("%d %d %d\n",max,f,r); if(j!=T) printf("\n"); } return 0; }