본문 바로가기
PS(구 C++)

백준 1520 내리막길 C++

by 같이긍뱅와 2022. 3. 31.
#include<bits/stdc++.h>
#define MAX 501
using namespace std;
int N, M;
int dp[MAX][MAX];
int Map[MAX][MAX];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};

int DFS(int x, int y){
    if(x==N-1 && y==M-1) return 1;
    if(dp[x][y] != -1) return dp[x][y];
    dp[x][y] = 0;
    for(int i = 0; i < 4; i++){
        int nx = x+dx[i];
        int ny = y+dy[i];
        if(nx>=0 && ny>=0 && nx<N && ny<M){
            if(Map[nx][ny] < Map[x][y])
                dp[x][y] += DFS(nx, ny);
        }
    }
    return dp[x][y];
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N >> M;
    for(int i = 0; i < N; i++){
        for(int j = 0; j < M; j++){
            cin >> Map[i][j];
            dp[i][j] = -1;
        }
    }
    cout << DFS(0, 0);
}

댓글