最大子串和

题意

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


分析

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


var
n,i,t,m:longint;
a:array[0..200000]of longint;
begin
    readln(n);
    for i:=1 to n do
    read(a[i]);
    t:=0;
    m:=-maxlongint;
    for i:=1 to n do
    begin
        t:=t+a[i];
        if t>m then m:=t;
        if t<0 then t:=0;
    end;
    write(m);
end.


posted @ 2017-02-04 16:53  银叶草  阅读(105)  评论(0编辑  收藏  举报
Live2D