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

Tác giả: ladpro98

Ngôn ngữ: Pascal

program qbmax;
uses    math;
const   fi='';
var     a,tong:array[0..101,0..101] of longint;
        check:array[0..101,0..101] of boolean;
        res,m,n,i,minA:longint;
        inp:text;
procedure input;
var     i,j:longint;
begin
        assign(inp,fi);
        reset(inp);
        readln(inp,m,n);
        for i:=1 to m do
        begin
                for j:=1 to n do
                begin
                        read(inp,a[i,j]);
                        minA:=min(a[i,j],minA);
                end;
                readln(inp);
        end;
        close(inp);
end;

function qhd(i,j:longint):longint;
var     temp:longint;
begin

        if check[i,j] then exit(tong[i,j]);

        temp:=qhd(i-1,j-1);
        temp:=max(temp,qhd(i,j-1));
        temp:=max(temp,qhd(i+1,j-1));

        tong[i,j]:=temp+a[i,j];
        check[i,j]:=true;
        exit(tong[i,j]);
end;

procedure init;
var     i:longint;
begin
        for i:=0 to n+1 do begin
                tong[0,i]:=low(integer);
                check[0,i]:=true;
                tong[m+1,i]:=low(integer);
                check[m+1,i]:=true;
        end;

        for i:=1 to m do
        begin
                tong[i,0]:=low(integer);
                check[i,0]:=true;
                tong[i,n+1]:=low(integer);
                check[i,n+1]:=true;
        end;
        for i:=1 to m do
        begin
                tong[i,1]:=a[i,1];
                check[i,1]:=true;
        end;

end;

begin
        input;
        init;
        res:=low(longint);
        for i:=1 to m do
                res:=max(res,qhd(i,n));
        write(res);
end.

Download