#include using namespace std; const int N = 310; int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; int g[N][N]; // 邻接矩阵,地图 int f[N][N]; // 记录从i到j的最大距离 int n, m; // 行与列 int res; // 结果 // 记忆化搜索 int dfs(int x, int y) { if (~f[x][y]) return f[x][y]; // 求最长的轨迹,最起码是1 f[x][y] = 1; for (int i = 0; i < 4; i++) { int tx = x + dx[i], ty = y + dy[i]; if (tx < 1 || tx > n || ty < 1 || ty > m) continue; if (g[x][y] > g[tx][ty]) f[x][y] = max(f[x][y], dfs(tx, ty) + 1); } return f[x][y]; } int main() { cin >> n >> m; // n行 m列 // 读入每一个点的高度 for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> g[i][j]; // 初始化-1 memset(f, -1, sizeof f); // 从每一个点出发 for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) res = max(res, dfs(i, j)); // 输出结果 printf("%d\n", res); return 0; }