def dfs(x,y):
global N,M
if x == N-1 and y == M-1:
return 1
if dp[x][y] != -1:
return dp[x][y]
else:
dp[x][y] = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<N and 0<=ny<M:
if arr[nx][ny] < arr[x][y]:
dp[x][y] += dfs(nx,ny)
return dp[x][y]
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
dx = [-1,1,0,0]
dy = [0,0,-1,1]
arr = [list(map(int,input().split())) for _ in range(N)]
dp = [[-1]*M for _ in range(N)]
print(dfs(0,0))
DP 와 DFS가 결합된 문제였다. 최소로 도달한거리를 DP에 저장해서 얻는것이었다. 마지막 우리가 도달해야하는 위치만 초기값을 1로 주고, 나머지는 전부 0으로 초기화한뒤 역으로 계싼해서 오는것이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 11404 플로이드 (0) | 2021.03.08 |
---|---|
[BOJ/백준] 1197 최소 스패닝 트리 (0) | 2021.03.04 |
[BOJ/백준] 2580 스도쿠 (0) | 2021.03.02 |
[BOJ/백준] 2206 벽 부수고 이동하기 (0) | 2021.02.28 |
[BOJ/백준] 11000 강의실 배정 (0) | 2021.02.27 |