#include <stdio.h> #include <string.h> int n, m; int direction[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int dfs_path(int heigh_1[][m], int dp[][m], int i, int j) { if (dp[i][j] != 0) { return dp[i][j]; } int max_length = 1; for (int k = 0; k < 4; k++) { int x = i + direction[k][0]; int y = j + direction[k][1]; if (x >= 0 && x < n && y >= 0 && y < m && heigh_1[x][y] < heigh_1[i][j]) { int cur = dfs_path(heigh_1, dp, x, y); if (cur + 1 > max_length) { max_length = cur + 1; } } } dp[i][j] = max_length; return dp[i][j]; } int main() { scanf("%d %d", &n, &m); int height[n][m]; int dp[n][m]; int res = 0; for (int i = 0 ; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &height[i][j]); } } memset(dp, 0, sizeof(dp)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int path = dfs_path(height, dp, i, j); if (path > res) { res = path; } } } printf("%d", res); return 0; }