#include <stdio.h>
using namespace std;
int a[500][500];
int dp[500][500];
int n, m;
int dr[4] = {0, 0, -1, 1};
int dc[4] = {1, -1, 0, 0};
int dfs(int row, int col)
{
if (row == 0 && col == 0)
{
return 1;
}
if (dp[row][col] == -1)
{
dp[row][col] = 0;
for (int i = 0; i < 4; i++)
{
int nr = dr[i] + row;
int nc = dc[i] + col;
if (nr >= 0 && nc >= 0 && nr < n && nc < m)
{
if (a[row][col] < a[nr][nc])
{
dp[row][col] += dfs(nr, nc);
}
}
}
}
return dp[row][col];
}
int main(void)
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
dp[i][j] = -1;
}
}
printf("%d\n", dfs(n - 1, m - 1));
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 9372] 상근이의 여행 (0) | 2021.01.25 |
---|---|
[백준 1080] 행렬 (0) | 2021.01.24 |
[백준 1655] 가운데를 말해요 (0) | 2021.01.14 |
[백준 17298] 오큰수 (0) | 2021.01.14 |
[백준 13305] 주유소 (0) | 2021.01.14 |
댓글