常规DP,但是要记录子序首尾序号
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t,a[100003],flag,k;
long int n,i,d[100003],t1,t2,max;
scanf("%d", &t);
k=0;
while (t--)
{
scanf("%ld", &n);
k++;
for (i=1;i<=n;i++)
scanf("%d", &a[i]);
d[0]=0;
d[1]=a[1];
for (i=2;i<=n;i++)
{
if (d[i-1]<0)
d[i]=a[i];
else
d[i]=d[i-1]+a[i];
}
max=-9999999;
for (i=1;i<=n;i++)
if (max<d[i]) {max=d[i];flag=i;}
t2=flag;
d[0]=-2;
for (i=flag;i>=1;i--)
if (d[i-1]<0)
{t1=i;break;}
printf("Case %d:\n",k);
printf("%ld %ld %ld\n",max,t1,t2);
if (t>0) printf("\n");
}
return 0;
}