这就是一个很简单的DP思想,状态转移方程为f[i]=max(f[i-1]+a[i],a[i])。
#include<stdio.h>
#include<string.h>
int main()
{
int num[100010],s;
int n,m,i,max,a,end,begin,t;
scanf("%d",&n);
for(t=1;t<=n;t++)
{
scanf("%d",&m);
memset(num,0,sizeof(num));
for(i=0;i<m;i++)
scanf("%d",&num[i]);
s=max=num[0];
begin=a=end=0;
for(i=1;i<m;i++)
{
if(s+num[i]<num[i]) {s=num[i];a=i;}//状态转移方程
else s+=num[i];
if(s>max) {max=s;begin=a;end=i;}
}//核心代码
printf("Case %d:\n",t);
printf("%d %d %d\n",max,begin+1,end+1);
if(t<n) printf("\n");
}
return 0;
}
与南阳 44 字串和相同