题意:n*m的矩阵,从(1,1)出发,只能向(i,j+1)、(i-1,j+1)、(i+1,j+1)的格子前进,每个格子有一个权值,求到(n,m)的最大权值和
简单dp,注意要求从(1,1)出发,所以有的点是走不到的,更新的时候判断一下即可
var
n,m :longint;
i,j :longint;
a,f :array[0..110,0..110] of longint;
function max(a,b:longint):longint;
begin
if a<b then exit(b) else exit(a);
end;
begin
read(n,m);
for i:=1 to n do
for j:=1 to m do read(a[i,j]);
f[1,1]:=a[1,1];
for j:=2 to m do
for i:=1 to n do
begin
if f[i-1,j-1]<>0 then f[i,j]:=max(f[i,j],f[i-1,j-1]);
if f[i,j-1]<>0 then f[i,j]:=max(f[i,j],f[i,j-1]);
if f[i+1,j-1]<>0 then f[i,j]:=max(f[i,j],f[i+1,j-1]);
if f[i,j]<>0 then inc(f[i,j],a[i,j]);
end;
writeln(f[n,m]);
end.
——by Eirlys