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;
}
浙公网安备 33010602011771号