最大数字子串和问题(NaiKai OJ P1760)

 1760: 最大数字子串

Time Limit: 1500 ms    Memory Limit: 10000 kB  
Judge type: Multi-cases
Total Submit : 177  (35 users)    Accepted Submit : 53  (31 users)    Page View : 651 
Font Style: Aa Aa Aa
输入n(1<=n<=1e6)和n个整数,这n个整数的绝对值均小于1000,求最大数字子串之和。

Input

输入为多组样例数据,每组第一行为一个正整数n,第二行为n个整数组成的数字串。

Output

对于每组样例,输出仅为一行,表示最大数字子串的各项之和。

Sample Input

9
-3 4 9 2 -10 -7 11 3 -8
13
-1 2 6 -3 5 -7 14 -5 -15 1 8 -4 9

Sample Output

15
17

Hint

在第一组中,最大的数字子串是4 9 2的和
在第二组中,最大的数字子串是2 6 -3 5 -7 14的和
 

Source

/*
一维DP,思路来源:因为是求数字子串的最大和,显然:我们可以在求解的过程中保留最大值!!!
但不可能得达到比原来更大的时候就要更新位置....

*/


#include 
< stdio.h >

int  main( void )
{
   
long max = -1000000,sum =0 ;
   
long n,i;
   
int data;
   
while((scanf("%ld",&n))!= EOF) 
   
{
   max 
= -1000000;
   sum 
=0 ;
   
for(i=1 ; i<= n ; i++)
   
{
   scanf(
"%d",&data);
   
if(sum >= 0)
   sum 
+= data ;
   
else
   sum 
= data ;
   
if(sum > max)
   max 
= sum ;
   }

   printf(
"%ld ",max);
   }

   
return 0 ;
}

     
 

你可能感兴趣的:(function,input,output)