HDU 1003 Max Sum 解题报告

时间:2023-03-08 22:37:25

题目大意:求一串数字中,几个连续数字加起来最大值,并确定起始和最末的位置。

思路:这是一题DP题,但是可以用尺取法来做。我一开始不会,也是看了某大神的代码,然后有人告诉我这是尺取法,现在会了。

 //尺取法 

 #include<stdio.h>
#include<string.h>
int que[];
main()
{
int t,flag;
scanf("%d",&t);
flag=t;
while(t--)
{
memset(que,,sizeof(que));
int n,i,temp=;
int fir=,end=,sum=-,max=-0x7fffffff;/*0x7fffffff这是2进制的int最大*/
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&que[i]);
for(i=;i<=n;i++)
{
if(sum<)
{
temp=i;
sum=que[i]; }
else
{
sum+=que[i]; }
if(sum>max)
{
max=sum;
fir=temp;
end=i;
} } printf("Case %d:\n",flag-t);
printf("%d %d %d\n",max,fir,end);
if(t)
printf("\n");
}
return ;
}