본문 바로가기
알고리즘 문제풀이/백준

[백준 1520] 내리막 길

by m2162003 2021. 1. 23.

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;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 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

댓글