HDU 1003 Max Sum

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003

以前做过类似的题目,但不需要保存下标。因为这题是动态规划的基础,所以从网上直接粘下来稍稍改动就保存下来了。步骤的含义都包含在代码中。。。

代码:

#include<stdio.h>
int main()
{
	int s,n,i,j,num,begin,end,probable,sum,max,count=1;//**begin,end分别保存最大子串的首尾。sum保存连续字串(最大连续串[可能]在其中)。**//
	//**max保存最大连续和,probalbe保存可能的最大连续和的首地址**//
	scanf("%d",&s);
	for(j=1;j<=s;j++)
	{
		sum=0;
		probable=1;//**不是first=1,现在只是可能,到下面发现比目前大的连续子串时才用first记录**//
		max=-100000;
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&num);
			sum=sum+num;
			if(sum>max)//**发现比目前大的连续子串**//
			{
				max=sum;
				begin=probable;
				end=i;
			}
			if(sum<0)//**根据原理,后面可能有比他还大的**//
			{
				sum=0;//**重新记录**//
				probable=i+1;//**可能更大的串一定从下一个开始**//
			}
		}
		printf("Case %d:\n",count++);
		printf("%d %d %d\n",max,begin,end);
		if(j<=s-1)//**格式**//
		{
			printf("\n");
		}
	}
	return 0;
}



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值