import java.util.Scanner;
public class Main {
static Scanner sc = new Scanner(System.in);
static int[][] place;
static int[][] dp;
//java不支持静态数组的初始化
static int dx[] = {0, 1, 0, -1};
static int dy[] = {1, 0, -1, 0};
static int r, c;
static int maxl;
public static int dfs(int x, int y) {
//判断是否访问过
if (dp[x][y] != 0) {
return dp[x][y];
}
dp[x][y] = 1;
int m = 0;//四个方向上的最长路径
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
//判断是否越界
if (nx < 1 || ny < 1 || nx > r || ny > c) {
continue; //跳出本次循环
}
//检查新的位置是否大于当前位置(我们要找小的位置滑下去)
if (place[nx][ny] >= place[x][y]) {
continue;
}
m = Math.max(m, dfs(nx, ny));
}
dp[x][y] += m;
maxl = Math.max(maxl, dp[x][y]);
return dp[x][y];
}
public static void main(String[] args) {
r = sc.nextInt();
c = sc.nextInt();
place = new int[r + 1][c + 1];
dp = new int[r + 1][c + 1];
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
place[i][j] = sc.nextInt();
}
}
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
dfs(i, j);
}
}
System.out.println(maxl);
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复