AcWing 901. 滑雪-java
原题链接
简单
JAVA 代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int N=500,n,m;
static int[][]dp=new int[N][N];
static int[][]s=new int[N][N];
static int[][]g=new int[N][N];
static int[]dx= {0,0,1,-1};
static int[]dy= {1,-1,0,0};
static BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
static String []r;
public static void main(String[] args) throws IOException {
r=sc.readLine().split(" ");
n=Integer.parseInt(r[0]);
m=Integer.parseInt(r[1]);
for(int i=0;i<N;i++)
{Arrays.fill(g[i],0x3f3f3f3f);
Arrays.fill(dp[i], -1);}
for(int i=1;i<=n;i++)
{r=sc.readLine().split(" ");
for(int j=1;j<=m;j++)
{
g[i][j]=Integer.parseInt(r[j-1]);
}
}
int res=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
res=Math.max(res,dp(i,j));
}
System.out.println(res);
}
static int dp(int x,int y)
{
if(dp[x][y]!=-1)
return dp[x][y];
dp[x][y]=1;
for(int i=0;i<4;i++)
{
int newx=x+dx[i],newy=y+dy[i];
if(newx>0&&newx<=n&&newy>0&&newy<=m&&g[x][y]>g[newx][newy])
{
dp[x][y]=Math.max(dp[x][y],dp(newx,newy)+1);//这一位置可以到达的最大距离
}
}
return dp[x][y];
}
}