HDU 1003 Max Sum 解题报告

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

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

 1 //尺取法 
 2 
 3 #include<stdio.h>
 4 #include<string.h>
 5 int que[100002];
 6 main()
 7 {
 8   int t,flag;
 9   scanf("%d",&t);
10   flag=t;
11   while(t--)
12   {
13     memset(que,0,sizeof(que));
14     int n,i,temp=0;
15     int fir=1,end=1,sum=-1,max=-0x7fffffff;/*0x7fffffff这是2进制的int最大*/
16     scanf("%d",&n);
17     for(i=1;i<=n;i++)
18       scanf("%d",&que[i]);
19     for(i=1;i<=n;i++)
20     {
21       if(sum<0)
22       {
23         temp=i;
24         sum=que[i];
25         
26       }
27       else
28       {
29           sum+=que[i];
30           
31       }
32       if(sum>max)
33         {
34              max=sum;
35             fir=temp;
36             end=i; 
37         }
38          
39     }
40     
41     printf("Case %d:\n",flag-t);
42     printf("%d %d %d\n",max,fir,end);
43     if(t)
44         printf("\n");
45   }
46   return 0;
47 }

 

posted @ 2014-05-06 15:25  Sylvia小伊  阅读(206)  评论(1编辑  收藏  举报