^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
var
f:array[1..100,1..100] of longint;
xx:array[1..4] of longint=(0,-1,1,0);
yy:array[1..4] of longint=(1,0,0,-1);
a:array[1..100,1..100] of longint;
i,j,r,c,codeans,ans:longint;
procedure dfs(x,y:longint);
var
i,x1,y1,key:longint;
begin
for i:=1 to 4 do
begin
x1:=x+xx[i];
y1:=y+yy[i];
if (x1>0) and (x1<=r) and (y1>0) and (y1<=c) and (a[x1,y1]<a[x,y]) then
begin
if a[x1,y1]+codeans<ans then
continue
else
begin
f[x1,y1]:=codeans;
key:=codeans;
inc(codeans);
if codeans>ans then
ans:=codeans;
dfs(x1,y1);
codeans:=key;
end;
end;
end;
end;
begin
readln(r,c);
for i:=1 to r do
for j:=1 to c do
read(a[i,j]);
for i:=1 to r do
for j:=1 to c do
begin
codeans:=1;
if codeans>f[i,j] then
f[i,j]:=codeans;
if codeans>ans then
ans:=codeans;
dfs(i,j);
end;
writeln(ans);
end.
var
r,c,i,j,k:longint;
b,a:array[0..100,0..100]of longint;
procedure dfs(x,y,s:longint);
begin
if s>k then k:=s;
if b[x+1,y]=0 then
begin
if a[x+1,y]>a[x,y] then dfs(x+1,y,s+1);
end;
if b[x-1,y]=0 then
begin
if a[x-1,y]>a[x,y] then dfs(x-1,y,s+1);
end;
if b[x,y+1]=0 then
begin
if a[x,y+1]>a[x,y] then dfs(x,y+1,s+1);
end;
if b[x,y-1]=0 then
begin
if a[x,y-1]>a[x,y] then dfs(x,y-1,s+1);
end;
end;
begin
assign(input,'huaxue.in');reset(input);
readln(r,c);
for i:=1 to r do
begin
b[i,0]:=1;
b[i,c+1]:=1;
end;
for j:=1 to c do
begin
b[0,j]:=1;
b[r+1,j]:=1;
end;
for i:=1 to r do
begin
for j:=1 to c do read(a[i,j]);readln;
end;
for i:=1 to r do
begin
for j:=1 to c do
dfs(i,j,1);
end;
write(k);
close(input);
end.
最后一个点超时
program p317;
type
integer=longint;
var
r,c,i,j,ans,kk:integer;
a,f:array [0..200,0..200] of integer;
function work(x,y:integer):integer;
var
ans,k:integer;
begin
if f[x,y]>0
then
exit(f[x,y])
else
begin
ans:=0;
if (x-1>0) and (a[x-1,y]>a[x,y])
then
begin
k:=work(x-1,y);
if k>ans
then
ans:=k;
end;
if (x+1<=r) and (a[x+1,y]>a[x,y])
then
begin
k:=work(x+1,y);
if k>ans
then
ans:=k;
end;
if (y+1<=c) and (a[x,y+1]>a[x,y])
then
begin
k:=work(x,y+1);
if k>ans
then
ans:=k;
end;
if (y-1>0) and (a[x,y-1]>a[x,y])
then
begin
k:=work(x,y-1);
if k>ans
then
ans:=k;
end;
work:=ans+1;
if work>kk
then
kk:=work;
end;
end;
begin
readln(r,c);
kk:=0;
for i:=1 to r do
for j:=1 to c do
read(a[i,j]);
fillchar(f,sizeof(f),0);
for i:=1 to r do
for j:=1 to c do
f[i,j]:=work(i,j);
writeln(kk);
end.