dp的变化,主要问题是要标记初始和终止位置,因为这个问题老wa……
代码如下:
#include
int main()
{
int T,n,start,end,sum,flag,a;//n为每组测试实例的元素个数,sum为最大连续序列值。
int max;
scanf("%d",&T);
for(int i = 1; i <= T; i ++)
{
start = end = flag = 1;//start和end分别为最大连续序列的起点和终点位置,flag记录每次求和的开始位置,初始均为1。
sum = 0;//每组测试之前sum置零
max = -9999;//因为a 是-1000~1000的,所以这里相当于变成最小值
scanf("%d",&n);
for(int j = 1; j <= n;j ++)
{
scanf("%d",&a);
sum += a;//记录最大连续序列的值
if(sum > max)
{
max = sum;
start = flag;
end = j;
}
if(sum < 0)
{
sum = 0;
flag = j + 1;
}
}
if(i != 1)
printf("\n");
printf("Case %d:\n",i);
printf("%d %d %d\n",max,start,end);
}
return 0;
}