连接地址: http://acm.hdu.edu.cn/showproblem.php?pid=1003
给你一串数字,你要从中找到该数字串中一连串的数字求和的最大值。
例如:给你6,-1,5,4,-7,最大和是6+ (-1) + 5 + 4 = 14。
我的思路是以第一个数字开始加,一旦和值为负,跳出;然后以第二个数字开始加,重复上述。
但是有个不起眼的坑,我就被坑在这里了。就是至少要取一个数字,那么输入全为负数和零的情况,就要注意一下。
我的解决方法就是先把最大和值赋值为-1000,这样便解决了这个问题。
然后按格式要求输出结果就可以了。
以下是我AC的代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int i,j,k,l=0,r=0,s,sum,n,m,a[100010];
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&m);
for (j=0;j<m;j++)
{
scanf("%d",&a[j]);
}
for (sum=-1000,j=0;j<m;j++)
{
for (s=0,k=j;k<m;k++)
{
s+=a[k];
if (s>sum)
{
l=j+1;
r=k+1;
sum=s;
}
if (s<0) break;
}
}
printf("Case %d:\n",i);
if (i==n) printf("%d %d %d\n",sum,l,r);
else printf("%d %d %d\n\n",sum,l,r);
}
return 0;
}