hdu 1003 Max Sum (DP)

点击打开链接

题意:给你一串数,输出此列数中连续不间断的子数的最大和,以及其开始的位置,结束的位置

按下面的程序分析::

j暂时存储开始的位置,结束的位置用end存,其中,当sum<0时,则不满足和最大的条件,所以j的位置加一(即j=i+1),注意最后输出时,开始和结束的位置要加一,因为循环变量i是从0开始加的。。。

#include"stdio.h"
int main()
{
	int sta,end,i,j,t,n,sum,max,m,count;
	scanf("%d",&t);
	count=0;
	while(t--)
	{
		count++;
		scanf("%d",&n);
		sta=end=0;
		max=-9999;
		sum=0;j=0;
		for(i=0;i<n;i++)
		{
			scanf("%d",&m);
			sum+=m;
			if(sum>max)
			{
				max=sum;
				sta=j;
				end=i;
			}
			if(sum<0)
			{
				sum=0;
				j=i+1;
			}
		}
		printf("Case %d:\n%d %d %d\n",count,max,sta+1,end+1);
		if(t)
			printf("\n");
	}
	return 0;
}


原文地址:https://www.cnblogs.com/yyf573462811/p/6365200.html