当前位置:   article > 正文

经典例题(二)——最大子段和

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

最大字段和

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

【输入格式】输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。

第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。

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

【输入样例】

7
2 -4 3 -1 2 -4 3

【输出样例】

4

【数据规模与约定】

对于40%的数据,有N ≤ 2000。

对于100%的数据,有N ≤ 200000。

【解题思路】

方法一:动态规划处理。

状态转移方程:

f[i]:=max(a[i],f[i-1]+a[i])    //要么舍弃,要么累加

方法二:类似贪心的算法。如果这个数小于零则不加上去

参考程序:

var
  n,i,s,ans,a:longint;
function max(a,b:longint):longint;
begin
  if a>b then exit(a)
    else exit(b);
end;
begin
  readln(n);
  s:=0;
  ans:=-maxlongint;
  for i:=1 to n do
  begin
    read(a);
    s:=s+a;
    ans:=max(ans,s);
    if s<0 then s:=0;
  end;
  writeln(ans);
end.

 

转载于:https://www.cnblogs.com/LJY2002/p/7782379.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/951831
推荐阅读
相关标签
  

闽ICP备14008679号