最佳游览



[问题描述]
 有一座旅游城,它的街道成网格状(如图).其中东西向的街道是“风景线、两旁分布着许多景观:南北向的街道都是林萌道,两旁没有任何建筑物。由于游客众多,"风最线”被规定为单行道,游客在风景线上只能从西走到东,林萌道上则可以任意行走。
 一名游客将到这座旅游城旅游。他根据自己对景观的喜好给所有的风景线打了分,分值是从-100到+100的整数,分值越大表示我们的旅游者越喜欢这条风最线上的景致。显然这位游客不可能给这座旅游城的所有风景线都打负分。
::点击图片在新窗口中打开::
 游客可以从旅游城的任一个十字路口开始游览,在任一个十字路口结束游览。我们的旅游者希望一路上游览的所有风最线的分值之和能够尽可能地大。请你写一个程序,帮助这位游客寻找一条最佳的游览路线。

[输入]
 第一行是两个整数M和N,之间用一个空格符隔开,M 表示旅游城南北向林萌道的段数,N表示东西向风景线的段数,l<=M<=100,1<=N<=20000。接下来的M行依次给出了由北向南各条风景线的分值信息。每行有N个整数,依次表示了自西向东每段风景线的分值。同一行相邻两个数之间用一个空格隔开。
[输出]
 输出只有一行,含一个整数,表示你的程序所找到的最佳游览路线的总分值。

[样例输入]
5 11
74 -19 -68 -46 64 -100 -49 -77 -98 70
1 20 50 24 -15 -100 21 82 25 -21
22 56 44 -99 22 87 -35 -47 -33 9
-5 67 -78 -81 83 85 -61 40 95 30
-51 56 -91 -36 -13 -90 72 67 -81 -51
[样例输出]
704

NOI97 D2?.

读题后发现,不过是把每一列的最大值找出来

然后求最大连续和即可..

 1 Var
 2   m,n,i,j,ch:longint;
 3   a:Array[0..20001] of longint;
 4   DC,DA:Int64;
 5 Begin
 6   Read(m,n);
 7   Dec(n);
 8   Fillchar(a,SizeOf(a),$f5);  //Init();
 9   For i:=1 to m do
10     For j:=1 to n do
11       Begin
12         Read(ch);
13         if ch>a[j] Then a[j]:=ch;
14       End;
15   DC:=0;
16   For i:=1 to n do
17     Begin
18       DC:=DC+a[i];
19       if DC<0 Then DC:=0;
20       if DC>DA Then DA:=DC;
21     End;
22   Writeln(DA);
23 End.
24 //细节...
25 (*)2012/11/05(*)

 

posted @ 2012-11-05 14:24  Iris.Catch-22.S、`  阅读(262)  评论(0编辑  收藏  举报