1.思路:best为存储的最大的连续和,sum存储从开始到一直相加的结果
begin为开始位置,end为结束位置
#include<stdio.h>
#define MAX 100001
int main()
{
int n,count=1;
int A[MAX];
scanf("%d",&n);
while(n--)
{
int i,k=1,num;
int begin=1,end=1,sum=0,best=-1001; //赋值为一定比第一个元素小的值
scanf("%d",&num);
for(i=1;i<=num;i++)
scanf("%d",&A[i]);
for(i=1;i<=num;i++)
{
sum+=A[i];
if(sum>best) //k保存的为开始位置,end由i确定
{
best=sum;
begin=k;
end=i;
}
if(sum<0)//sum小于0,则开始位置向后移动i+1个位置
{
sum=0;
k=i+1;//1.只做记录,只有当sum累加后大于先前的best,才真正的
}//在上一个if语句中改变起始位置的值,否则一直不变
}//2.也为了去掉前面都为负数的情况
printf("Case %d:\n",count++);
printf("%d %d %d\n",best,begin,end);
if(n)
printf("\n");
}
return 0;
}