www.acmicpc.net/problem/1520
#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;
}
댓글