老是过不了 ...
program sking;
var a,f:array[0..200,0..200] of longint ;
q,w:array[0..10] of longint;
i,j,k,m,n,x,y,z,s,t:longint;
function max(a,b:longint):longint;
begin
max:=a;
if a< b then
max:=b;
end;
function find(x,y:longint):longint;
var i,j,k,l,z,s,t,m,n:longint;
begin
if f[x,y]>0 then exit(f[x,y]);
for i:= 1 to 4 do
if (a[x+q[i],y+w[i]]<a[x,y])and(x+q[i]>0)and(x+q[i]<=m)and(y+w[i]>0)and(y+w[i]<=n) then
begin
t:= find(x+q[i],y+w[i])+1;
f[x,y]:=max(f[x,y],t);
end;
f[x,y]:=max(f[x,y],1);
find:=f[x,y];
end;
begin
read(m,n);
for i:=1 to m do
for j:= 1 to n do
f[i,j]:=0;
for i:=1 to m do
for j:= 1 to n do
read(a[i,j]);
q[1]:=1;
q[2]:=0;
q[3]:=0;
q[4]:=-1;
w[1]:=0;
w[2]:=-1;
w[3]:=1;
w[4]:=0;
for i:=1 to m do
for j:= 1 to n do
f[i,j]:=find(i,j);
for i:= 1 to m do
for j:=1 to n do
z:= max(z,f[i,j]);
write(z);
end.
program hudsad;
const
dx:array[1..4] of integer=(-1,0,1,0);
dy:array[1..4] of integer=(0,1,0,-1);
var
map,f:array[1..100,1..100] of longint;
i,j,k,m,n,c,l,t,ans:longint;
function find(x,y:longint):longint;
var
i,j,k,t,nx,ny:longint;
begin
j:=1;
if f[x,y]>0 then begin find:=f[x,y];exit;end;
for i:=1 to 4 do
begin
nx:=x+dx[i];
ny:=y+dy[i];
if (nx>=1)and(nx<=n)and(ny>=1)and(ny<=c)and(map[x,y]<map[nx,ny])then
begin
t:=find(nx,ny)+1;
if t>j then j:=t;
end;
end;
f[x,y]:=j;
find:=j;
end;
begin
readln(n,c);
for i:=1 to n do
for j:=1 to c do
read(map[i,j]);
for i:=1 to n do
for j:=1 to c do begin
t:=find(i,j);
f[i,j]:=t;
if t>ans then ans:=t;
end;
writeln(ans);
end.
for i:=1 to n do
for j:=1 to c do begin
t:=find(i,j);
f[i,j]:=t;
if t>ans then ans:=t;
end;
为什么 中间要用t来过渡??