코드와이
[BAEKJOON] 1937. 욕심쟁이 판다 본문
메모이제이션★★★
문제링크
https://www.acmicpc.net/problem/1937
1937번: 욕심쟁이 판다
n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서
www.acmicpc.net
package acmicpc.Gold3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 욕심쟁이_판다 {
static int n, map[][], dp[][], ans;
static int[] dr = {-1,1,0,0};
static int[] dc = {0,0,1,-1};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
map = new int[n][n];
dp = new int[n][n];
for(int i = 0 ; i < n ; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0 ; j < n ; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
ans = 1;
for(int i = 0 ; i < n ; i++) {
for(int j = 0 ; j < n ; j++) {
ans = Math.max(ans, dfs(i,j));
}
}
System.out.println(ans);
}
public static int dfs(int r, int c) {
if(dp[r][c] != 0) return dp[r][c];
dp[r][c] = 1;
for(int d = 0 ; d < 4 ; d++) {
int nr = r + dr[d];
int nc = c + dc[d];
if(nr < 0 || nc < 0 || nr >= n || nc >= n) continue;
if(map[nr][nc] > map[r][c]) {
dp[r][c] = Math.max(dfs(nr, nc) + 1, dp[r][c]);
dfs(nr,nc);
}
}
return dp[r][c];
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 11066. 파일 합치기 (0) | 2021.06.16 |
---|---|
[BAEKJOON] 16234. 인구 이동 (0) | 2021.06.16 |
[BAEKJOON] 14890. 경사로 (0) | 2021.06.09 |
[BAEKJOON] 2250. 트리의 높이와 너비 (0) | 2021.06.02 |
[BAEKJOON] 12738. 가장 긴 증가부분 수열3 (0) | 2021.05.29 |