https://www.acmicpc.net/problem/1520
"""
1. 아이디어
2. 시간복잡도
"""
from sys import stdin
input = stdin.readline
n, m = map(int, input().split())
maps = [ list(map(int, input().split())) for _ in range(n) ]
dp = [ [-1] * m for _ in range(n) ]
dx, dy = [0, 0, -1, 1], [-1, 1, 0, 0]
def dfs(x, y):
if x == n-1 and y == m-1: # 목적지에 도착하면 1 반환
return 1
if dp[x][y] == -1: # 방문한 곳이 아니면 재귀
dp[x][y] = 0
for k in range(4):
mx = x + dx[k]
my = y + dy[k]
if 0 <= mx < n and 0 <= my < m:
if maps[x][y] > maps[mx][my]:
dp[x][y] += dfs(mx, my)
return dp[x][y]
print(dfs(0, 0))
그냥 이런 형식의 문제를 많이 풀어보는게 답인듯.
이 문제는 그림을 그리면서 풀어야 이해가 잘된다.