【样例解释】
(1,1)->(1,2)->(1,3)->(2,3)->(2,2)->(3,2)
1+2+5+6+11+12=37
代码如下: 记忆化搜索
const
wx:array[1..4]of longint=(1,0,-1,0);
wy:array[1..4]of longint=(0,1,0,-1);
var
a,f:array[-100..1001,-100..1001]of longint;
n,k,max:longint;
procedure dfs(x,y:longint);
var i,j:longint;
begin
for i:=1 to 4 do
for j:=1 to k do
if (a[x,y]<a[x+wx[i]*j,y+wy[i]*j])and(x+wx[i]*j>0)and(x+wx[i]*j<=n)and(y+wy[i]*j>0)and(y+wy[i]*j<=n) then
if f[x+wx[i]*j,y+wy[i]*j]<f[x,y]+a[x+wx[i]*j,y+wy[i]*j] then
begin
f[x+wx[i]*j,y+wy[i]*j]:=f[x,y]+a[x+wx[i]*j,y+wy[i]*j];
dfs(x+wx[i]*j,y+wy[i]*j);
end;
end;
procedure init;
var i,j:longint;
begin
readln(n,k);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
f[1,1]:=a[1,1];
end;
procedure print;
var i,j:longint;
begin
for i:=1 to n do
for j:=1 to n do
if f[i,j]>max then max:=f[i,j];
write(max);
end;
begin
assign(input,'mouse.in'); reset(input);
assign(output,'mouse.out');rewrite(output);
init;
dfs(1,1);
print;
end.