讨论 / 【Seve】恩,只有90分
Seve 2011-10-31 08:41:00
点我顶贴 收藏 删除
dfs 但是最后一个点超时

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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.

#1 朱星滔@2010-09-25 04:03:00
回复 删除
一样

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.

#2 yljdsg@2011-10-31 08:41:00
回复 删除
一样

最后一个点超时

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.

查看更多回复
提交回复