本专栏目录
蓝桥杯算法竞赛大纲数论相关(Java)
枚举相关(Java)
对象排序(Java)
排序相关算法(Java)
记忆化搜索(Java)
树论相关(Java)
图论相关(Java)
堆(Java)贪心(Java)
package 搜索;
import java.util.Scanner;
// https://www.luogu.com.cn/problem/P1434
public class _记忆化搜索 {
static int m, n;
static int max = -1;
static int[] dx = {1, -1, 0, 0};
static int[] dy = {0, 0, 1, -1};
static int[][] arr;
static int[][] cache;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
m = scan.nextInt();
arr = new int[n][m];
cache = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = scan.nextInt();
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
max = Math.max(max, dfs(i, j));
}
}
System.out.println(max);
}
public static int dfs(int x, int y) {
if (cache[x][y]!=0){
return cache[x][y];
}
int t = 0;
for (int k = 0; k < 4; k++) {
int xx = x + dx[k];
int yy = y + dy[k];
if (xx<0||yy<0||xx>=n||yy>=m||arr[x][y]<=arr[xx][yy]){
continue;
}
t = Math.max(t, dfs(xx, yy));
}
cache[x][y] = t + 1;
return t + 1;
}
}