QBMAX - Đường đi có tổng lớn nhất

Tác giả: flashmt

Ngôn ngữ: Pascal

var a,b:array[0..101,1..100] of integer;
    n,m:byte;

procedure rf;
var i,j:byte;
begin
     readln(m,n);
     for i:=1 to m do
     begin
          for j:=1 to n do
              read(a[i,j]);
          readln;
     end;
end;

function max(a,b,c:integer):integer;
begin
     if (a>=b) and (a>=c) then max:=a
     else
     begin
          if b>c then max:=b else max:=c;
     end;
end;

procedure pr;
var i,j:byte;
begin
     fillchar(b,sizeof(b),0);
     for j:=1 to n do
     begin
          b[0,j]:=-30000;
          b[n+1,j]:=b[0,j];
     end;
     for i:=1 to m do
         b[i,1]:=a[i,1];
     for j:=2 to n do
         for i:=1 to m do
             b[i,j]:=max(b[i-1,j-1],b[i,j-1],b[i+1,j-1])+a[i,j];
end;

procedure wf;
var  i:byte; max:integer;
begin
     max:=-32000;
     for i:=1 to m do
         if b[i,n]>max then max:=b[i,n];
     write(max);
end;

begin
     rf;
     pr;
     wf;
end.

Download