http://www.lydsy.com/JudgeOnline/problem.php?id=1616
循环写4msAC,记忆化搜索TLE,到底哪里出问题?实在查不出来。
Codeprogram Travelling; const dx:array[1..4] of longint=(-1,1,0,0); dy:array[1..4] of longint=(0,0,1,-1); maxn=100;maxt=15;Filename='Travelling'; var f:array[0..maxn+1,0..maxn+1,0..maxt] of longint; map:array[0..maxn+1,0..maxn+1] of boolean; i,j,n,m,t,r1,r2,c1,c2,tmp,k,l,nx,ny:longint; ch:char; procedure DFS(x,y,t:longint); var nx,ny,tmp,i:longint; begin tmp:=0; if(F[x][y][t]<>0)or(t<=0)then exit; for i:=1 to 4 do begin nx:=x+dx[i];ny:=y+dy[i]; if map[nx][ny] then begin DFS(nx,ny,t-1); inc(tmp,F[nx][ny][t-1]); end;end; F[x][y][t]:=tmp; end; begin fillchar(map,sizeof(map),false); readln(N,M,T); for i:=1 to N do begin for j:=1 to M do begin read(ch); if ch='.' then map[i][j]:=true; end;readln;end; readln(R1,C1,R2,C2); F[R1][C1][0]:=1; for k:=1 to T do for i:=1 to n do for j:=1 to m do begin if not map[i][j] then continue; tmp:=0; for l:=1 to 4 do begin nx:=i+dx[l];ny:=j+dy[l]; if map[nx][ny] then tmp:=tmp+F[nx][ny][k-1]; end; f[i][j][k]:=tmp; end; writeln(F[R2][C2][T]); end.