首页 > 学院 > 开发设计 > 正文

最大子段和

2019-11-10 19:14:20
字体:
来源:转载
供稿:网友

题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大。

输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。

输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少。子段的最小长度为1。

输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4

说明

【样例说明】 2 -4 3 -1 2 -4 3 【数据规模与约定】 对于40%的数据,有N ≤ 2000。 对于100%的数据,有N ≤ 200000。

一个一个加,只要判断总和会不会小于0就行,小于0就接着往下重新计算和,因为如果所有数据里有正数的话,单个正数肯定更大,而如果都是负数的话,单个负数也比负数和大。


var n,i,m,k,g:longint;begin readln(n); m:=-maxlongint; for i:=1 to n do begin read(g); inc(k,g); if k>m then m:=k; if k<0 then k:=0; end; writeln(m);end.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表