페이지

1520번: 내리막 길

https://www.acmicpc.net/problem/1520


#include<stdio.h>
#include<algorithm>
using namespace std;
const int fx[] = { 1, -1, 0, 0 }, fy[] = { 0, 0, 1, -1 };
int m, n, map[500][500], dp[500][500];
int f(int xint y) {
    if (x < 0 || y < 0 || x >= m || y >= n) return 0;
    if (dp[x][y] >= 0) return dp[x][y];
    int ret = 0;
    for (int i = 0; i < 4; i++)
        if (map[x][y]>map[x + fx[i]][y + fy[i]])
            ret += f(x + fx[i], y + fy[i]);
    return dp[x][y] = ret;
}
int main() {
    scanf("%d %d", &m, &n);
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &map[i][j]), dp[i][j] = -1;
    dp[m - 1][n - 1] = 1;
    printf("%d", f(0, 0));
    return 0;
}

댓글 없음 :

댓글 쓰기