int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; intdp(int x, int y){ if(f[x][y] != -1) return f[x][y]; // 如果这个点不是初始值,说明已经计算过了,直接返回 f[x][y] = 1; for(int i = 0; i < 4; i++) { int a = x + dx[i]; int b = y + dy[i]; if(a >= 0 && a < n && b >= 0 && b < m && h[a][b] < h[x][y]) // 边界条件 f[x][y] = max(f[x][y], dp(a, b) + 1); } return f[x][y]; }
intmain(){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) scanf("%d", &h[i][j]); memset(f, -1, sizeof f); int res = 0; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) res = max(res, dp(i, j)); printf("%d", res); return0; }