链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
设sum为以a[i]为最后一个元素的最大字串和,则状态转移方程为sum=max(sum+a[i+1],a[i+1])
#include<stdio.h>
#include<string.h>
#define MAXN 100010
#define INF 100000
int a[MAXN];
int main()
{
int cas,i,j,n;
scanf("%d",&cas);
for(j=1;j<=cas;j++)
{
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&a[i]);
int ans=-INF,sum=0,t=0,s=0,e=0;
for(i=0;i<n;i++)
{
sum+=a[i];
if(sum>ans)
{
s=t;
e=i;
ans=sum;
}
if(sum<0)
{
t=i+1;
sum=0;
}
}
printf("Case %d:\n",j);
printf("%d %d %d\n",ans,s+1,e+1);
if(j!=cas) printf("\n");
}
return 0;
}