最大数字子串和问题(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
<script language="JavaScript" type="text/javascript"> function set_size(s) { document.getElementById('mainpro').style.fontSize = s+"px"; if (s>=16)document.getElementById('mainpro').style.fontFamily = "Times New Roman"; else document.getElementById('mainpro').style.fontFamily = "Tahoma"; } </script>
输入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 ;
}

     
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值