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.