1.1001
2.
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
Case 1: 14 1 4 Case 2: 7 1 6
3.dp
4.求最大字段和
d[i]表示已 i 结尾(字段和中含 i )在 a[1..i] 上的最大和,d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];
max = {d[i],1<=i<=n} ;
5.
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int j,i,k,n,m,t;
int a[100002];
scanf("%d",&t);
for (j=1;j<=t;j++)
{
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int sum=0,maxsum=-1001,first =0, last = 0, temp = 1;
for (i=0;i<n;i++)
{
sum += a[i];
if (sum > maxsum)
{
maxsum = sum;first = temp;last = i+1;
}
if (sum < 0)
{
sum = 0;temp = i+2;
}
}
printf("Case %d:\n%d %d %d\n",j,maxsum,first,last);
if (j!=t)
{
printf("\n");
}
}
return 0;
}