#include<iostream> #include<cstring> #include<algorithm> #define N 310
usingnamespace std;
int g[N][N], f[N][N]; // f[i, j] 表示i行j列的滑雪路径,属性是最远距离 int n, m; int xy[][4] = {{1, 0, -1, 0}, {0, 1, 0, -1}};
intdfs(int x, int y) { int &v = f[x][y]; // 只要当前x行y列的路径已经求过,则返回 if (~v) return v; // 初始值1 v = 1; for (int i = 0; i < 4; ++ i) { int a = x + xy[0][i], b = y + xy[1][i]; if (a >= 0 && a <n && b >= 0 && b < m && g[x][y] > g[a][b]) // dfs(a, b) + 1 表示当前的位置到下一个位置的路径 v = max(v, dfs(a, b) + 1); } return v; }
intmain() { cin >> n >> m; for (int i = 0; i < n; ++ i) for (int j = 0; j < m; ++ j) scanf("%d", &g[i][j]);
memset(f, -1, sizeof f);
int ans = 0; for (int i = 0; i < n; ++ i) for (int j = 0; j < m; ++ j) ans = max(ans, dfs(i, j));