package planning;
import java.util.*;
public class Skating {//类似数字三角形的递归写法
static int map[][];
static int dp[][];
static int sum,r,c;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
r=sc.nextInt();
c=sc.nextInt();
map=new int[r+1][c+1];
dp=new int[r+1][c+1];
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
map[i][j]=sc.nextInt();
dp[i][j]=-1;//标记,防止重复计算
}
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
sum=Math.max(sum,dfs(i,j));
System.out.println(sum);
}
static int dfs(int x,int y)
{
if(dp[x][y]!=-1)return dp[x][y];
int t=1;//至少为1(自身)
/**
* 按四个方向搜索
*/
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++)
if(dx!=dy&&dx+dy!=0&&(dx!=0||dy!=0))//!!!!(画出来你就懂了)
if(inmap(x+dx,y+dy)&&map[x][y]>map[x+dx][y+dy])//该方向在图内& >搜索点(x,y)
t=Math.max(t, dfs(x+dx,y+dy)+1);
dp[x][y]=t;//四个方向全部搜索完毕,保存结果
return dp[x][y];
}
static boolean inmap(int x,int y) {
return x>=0&&y>=0&&x<r&&y<c;//图的边界条件
}
}
滑雪(DP+搜索)
最新推荐文章于 2024-07-25 11:18:29 发布