PS/Baekjoon Online Judge

[백준 1937] 욕심쟁이 판다 [C]

kimyoungrok 2021. 8. 16. 03:54

백준 - 1937


풀이

시간 제한이 있어 dfs로 이미 탐색한 영역에는 이동할 수 있는 칸의 수의 최댓값을 dp에 기록하는 방식으로 풀이했다.

 


소스코드

#include <stdio.h>
#define max(a,b) a > b ? a : b
#define MAX 500
int forest[MAX][MAX], n;
int dp[MAX][MAX];
int dx[4] = {-1, 1}, dy[4] = {0, 0, -1, 1};

int dfs(int x, int y){
    if (!dp[x][y]){
        dp[x][y] = 1;
        for (int i = 0; i < 4; i++){
            int tx = x + dx[i], ty = y + dy[i];
		
            if (tx >= 0 && ty >= 0 && tx < n && ty < n)
                if (forest[tx][ty] > forest[x][y])
                    dp[x][y] = max(dp[x][y], dfs(tx, ty)+1);
        }
    }
    return dp[x][y];
}
int main(){
    scanf("%d", &n);
    for (int i = 0; i < n*n; i++)
        scanf("%d", &forest[i/n][i%n]);
		
    int cnt = 0;
    for (int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
        cnt = max(cnt, dfs(i, j));
    printf("%d", cnt);
}

출처

 

1937번: 욕심쟁이 판다

n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에

www.acmicpc.net