51Nod-1049-最大子段和

来源:互联网 发布:2016年旅游业数据分析 编辑:程序博客网 时间:2024/05/21 09:02

51Nod-1049 最大子段和

                1049 最大子段和N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。Input第1行:整数序列的长度N(2 <= N <= 50000)第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9)Output输出最大子段和。Input示例6-211-413-5-2Output示例20

一道有趣的动态规划问题。
每次输入的时候,判断一下前面的连续数之和sum的正负,如果为负数则sum变为0,同时加上当前输入的值,且把最大的连续数之和记录下来。
代码如下:

while True:    try:        n, sum, ans= int(input()), 0, 0        for i in range(n):            sum = max(sum, 0) + int(input())            ans = max(sum, ans)        print(ans)    except EOFError:        break
原创粉丝点击