-
[백준/BOJ] 11048번 이동하기 (C++)알고리즘 문제풀이/백준 2021. 1. 18. 18:19
DFS + DP 유형의 문제입니다.
DFS를 통해 (0, 0) 에서 시작해서 아래로 한칸, 오른쪽으로 한칸, 대각선으로 한칸 3방향으로 방문 가능한 경로로 (n-1, m-1) 에 도착하게 되고, 다시 (0, 0)으로 돌아오면서 현재 dp의 값과 DFS의 최대값을 누적해가며 답을 구합니다.
#include <iostream> #include <cstring> using namespace std; int n, m; int map[1001][1001]; int dp[1001][1001]; int DFS(int x, int y) { if(x < 0 || x >= n || y < 0 || y >= m) return 0; if(dp[x][y] != -1) return dp[x][y]; dp[x][y] = map[x][y]; return dp[x][y] += max(DFS(x + 1, y), max(DFS(x, y + 1), DFS(x + 1, y + 1))); } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> map[i][j]; } } memset(dp, -1, sizeof(dp)); cout << DFS(0, 0); }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 2583번 영역 구하기 (C++) (0) 2021.01.19 [백준/BOJ] 11060번 점프점프 (C++) (0) 2021.01.19 [백준/BOJ] 16964번 DFS 스페셜 저지 (C++) (0) 2021.01.15 [백준/BOJ] 7569번 토마토 (C++) (0) 2021.01.14 [백준/BOJ] 1012번 유기농 배추 (C++) (0) 2021.01.14