题目大意:输入数n,表示n组数据。每组数据开始的m表示余下数据数量,在这个序列中,找出1个子序列,使其和最大。输出包括这个和,子序列第一个数位置,子序列最后一个数位置。每个输出之间空一行。不要忘了Case %d:
#include <stdio.h>
int main()
{
int n,i,j,sum,max,m,num[100000],start,tstart,end;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
for(j=0;j<m;j++)
{
scanf("%d",&num[j]);
}
max=-1000;
sum=0;
end=start=tstart=1;
for(j=0;j<m;j++)
{
sum+=num[j];
if(sum>max)
{
end=j+1;
max=sum;
if(start!=tstart)
{
start=tstart;
}
}
if(sum<0)
{
sum=0;
tstart=j+2;
}
}
printf("Case %d:\n",i+1);
printf("%d %d %d\n",max,start,end);
if(i!=(n-1))
{
printf("\n");
}
}
return 0;
}