输入输出
输入描述 Input Description
第一行输入N,表示数字的个数,第二行输入这N个数字。
输出描述 Output Description
输出最大和。
样例 Sample
样例输入 Sample Input
8
2 -4 6 -1 -4 8 -1 3
样例输出 Sample Output
14
数据范围及提示 Data Size & Hint
数据说明:
40% 1<=N<=300
60% 1<=N<=2000
100% 1<= N<=100000,答案在longint范围内。
分析
环状求最大值出现在两种情况中
- 和链状一样,只出现在n内
和链状不同,即最大值出现在两头,那么中间那部分必然是最小和,也就是最大值为sum-minn;
综上所述
该环状取到最大值显然为两种中较大值。
由此只需比较链状连续最大和和sum-链状连续最小和。
代码如下
program p1648;
var n,i,j,maxn,minn,sum:longint;
f1,f2,num:array[0..100000] of longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function min(a,b:longint):longint;
begin
if a<b then exit(a);
exit(b);
end;
begin
readln(n);
sum:=0;
for i:=1 to n do
begin
read(num[i]);
sum:=sum+num[i];
end;
maxn:=0;
minn:=0;
f1[0]:=0;
f2[0]:=0;
for i:=1 to n do
begin
f1[i]:=max(f1[i-1]+num[i],0);
f2[i]:=min(f2[i-1]+num[i],0);
maxn:=max(maxn,f1[i]);
minn:=min(minn,f2[i]);
end;
maxn:=max(maxn,sum-minn);
write(maxn);
end.
叶
落叶
——(贾平凹创作散文)
窗外,有一棵法桐,样子并不大的。春天的日子里,它长满了叶子。枝根的,绿得深,枝梢的,绿得浅;虽然对列相间而生,一片和一片不相同,姿态也各有别。没风的时候,显得很丰满,娇嫩而端庄的模样。一早一晚的斜风里,叶子就活动起来,天幕的衬托下,看得见那叶背面了了的绿的脉络,像无数的彩蝴蝶落在那里,翩翩起舞;又像一位少妇,丰姿绰约的,作一个妩媚的笑。
我常常坐在窗里看它,感到温柔和美好。我甚至十分嫉妒那住在枝间的鸟夫妻,它们停在叶下欢唱,是它们给法桐带来了绿的欢乐呢,还是绿的欢乐使它们产生了歌声的清妙?
法桐的欢乐,一直要延长一个夏天。我总想,那鼓满着憧憬的叶子,一定要长大如蒲扇的,但到了深秋,叶子并不再长,反要一片一片落去。法桐就削瘦起来,寒伧起来。变得赤裸裸的,唯有些嶙峋的骨。而且亦都僵硬,不再柔软婀娜,用手一折,就一节一节地断了下来。
我觉得这很残酷,特意要去树下拣一片落叶,保留起来,以作往昔的回忆。想:可怜的法桐,是谁给了你生命,让你这般长在土地上?既然给了你这一身绿的欢乐,为什么偏偏又要一片一片收去呢!
来年的春上,法桐又长满了叶子,依然是浅绿的好,深绿的也好。我将历年收留的落叶拿出来,和这新叶比较,叶的轮廓是一样的。喔,叶子,你们认识吗,知道这一片是那一片的代替吗?或许就从一个叶柄眼里长上来,凋落的曾经那么悠悠地欢乐过,欢乐的也将要寂寂地凋落去。
然而,它们并不悲伤,欢乐时须尽欢乐;如此而已,法桐竟一年大出一年,长过了窗台,与屋檐齐平了!
我忽然醒悟了,觉得我往日的哀叹大可不必,而且有十分的幼稚呢。原来法桐的生长,不仅是绿的生命的运动,还是一道哲学的命题的验证:欢乐到来,欢乐又归去,这正是天地间欢乐的内容;世间万物,正是寻求着这个内容,而各自完成着它的存在。
我于是很敬仰起法桐来,祝福于它:它年年凋落旧叶,而以此渴望来年的新生,它才没有停滞,没有老化,而目标在天地空间里长成材了。