滑雪 记忆化搜索

来源:互联网 发布:淘宝话费充值怎么退款 编辑:程序博客网 时间:2024/04/29 05:24
  From silence滑雪    

 

 

 

 

背景 Background

 

 

成成第一次模拟赛 第三道

 

 

 

 

 

 

 

描述 Description

 

 

  trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
  例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。

 

 

 

 

 

 

 

输入格式 Input Format

 

 

输入文件

第1行: 两个数字r,c(1<=r,c<=100),表示矩阵的行列。
第2..r+1行:每行c个数,表示这个矩阵。

 

 

 

 

 

 

 

输出格式 Output Format

 

 

输出文件

仅一行: 输出1个整数,表示可以滑行的最大长度。

 

 

 

 

 

 

 

样例输入 Sample Input [复制数据]

 

 

 

 

 

 

 

 

 

样例输出 Sample Output [复制数据]

 

 

 

 

 

 

 

 

 

时间限制 Time Limitation

 

 

各个测试点1s

 

 

const d:array[1..4,1..2] of longint=((1,0),(0,1),(-1,0),(0,-1));var f,a:array[0..100,0..100] of longint;n,m,i,j,k,sum:longint;function max(x,y:longint):longint;begin if x>y then exit(x); exit(y);end;function find(x,y:longint):longint;var i,j,k,dx,dy:longint;begin if f[x,y]<>0 then exit(f[x,y]); for i:=1 to 4 do  begin   dx:=x+d[i,1]; dy:=y+d[i,2];   if (dx>0) and (dx<=n) and (dy>0) and (dy<=m) then    if a[dx,dy]<a[x,y] then     f[x,y]:=max(f[x,y],find(dx,dy)+1);  end; exit(f[x,y]);end;begin assign(input,'p1004.in'); assign(output,'p1004.out'); reset(input); rewrite(output); readln(n,m); sum:=0; for i:=1 to n do  for j:=1 to m do   read(a[i,j]); for i:=1 to n do  for j:=1 to m do   begin    k:=find(i,j);    if k>sum then sum:=k;   end; writeln(sum+1); close(input); close(output);end.


 

原创粉丝点击