简单的动态规划
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int sum,first[100005],last;
void deal(int *a,int *ans,int n)
{
int i;
for(i=2;i<=n;i++)
{
if(ans[i-1]+a[i]>=a[i])
{
ans[i]=ans[i-1]+a[i];
first[i]=first[i-1];
}
else
{
ans[i]=a[i];
first[i]=i;
}
}
for(i=1;i<=n;i++)
{
if(sum<ans[i])
{
sum=ans[i];
last=i;
}
}
}
int main()
{
int p=0,t;
int a[100005]={0};
int num;
int ans[100005];
int i;
scanf("%d",&t);
while(p++!=t)
{
last=0;
memset(first,0,sizeof(first));
sum=-10000;
scanf("%d",&num);
for(i=1;i<=num;i++)
scanf("%d",&a[i]);
ans[1]=a[1];
first[1]=1;
deal(a,ans,num);
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
printf("Case %d:\n",p);
printf("%d %d %d\n",sum,first[last],last);
if(p!=t)
printf("\n");
}
return 0;
}