本专栏目录

​蓝桥杯算法竞赛大纲​​​​数论相关(Java)​​​​​

​枚举相关(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;
}
}