(HDOJ 1003)Max Sum

 

Max Sum
Problem Description
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.
 

Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).
 

Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.
 

Sample Input
2

5 6 -1 5 4 -7

7 0 6 -1 1 -6 7 -5

 

Sample Output
Case 1: 14 1 4

Case 2: 7 1 6

 

Author
Ignatius.L
 
AC code:
 1  #include < stdio.h >  
 2  #include < string .h >  
 3  #include < stdlib.h >    
 4  int  main() 
 5 
 6    
 7       int  r  =   0 ,l  =   0 ,i =   0  ,j  =   0 ,num  =   0 ,n; //  l用来记录最大左范围r 右 
 8       int   * a; // ,[6]={5,6,5,-4,-7,3}; 
 9       int  sum  =   0 ,max  =   0 ,t =   1
10      scanf( " %d " , & n); 
11       while (n --
12      { 
13          scanf( " %d " , & num); 
14          a  =  ( int   * )calloc(num, sizeof ( int )); 
15           for (i  =   0 ; i  <  num ;i  ++
16              scanf( " %d " , & a[i]); 
17           for ( l  =   0 ,r  =   0 ,sum  =   0 ,max  =  a[ 0 ],i  =   0 ;i  < num ;i  ++
18          { 
19               for (sum  =   0 ,j  =  i ;j  < num ;j  ++
20              { 
21                  sum  +=  a[j]; 
22                   if (sum  >  max) 
23                  { 
24                      max  =  sum ; 
25                      l  =  i; 
26                      r  =  j; 
27                  } 
28                   if (sum  <   0
29                  { 
30                      i  =  j; 
31                      sum  = 0
32                       break
33                  } 
34              } 
35          } 
36          printf( " Case %d:\n%d %d %d\n " ,t ++ ,max ,l + 1  ,r + 1 ); 
37           if ( n) 
38              printf( " \n " ); 
39           // getchar(); 
40      } 
41       return   0

42 } 

 

 

你可能感兴趣的:(max)