HDU 1003 Max Sum

来源:互联网 发布:詹姆斯五项数据第一 编辑:程序博客网 时间:2024/05/16 03:04

连接地址: 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;
}

0 0
原创粉丝点击