본문 바로가기

algorithm/Dynamic Programming

[C++] BOJ 11048 이동하기

문제

백준 11048번 이동하기 https://www.acmicpc.net/problem/11048

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net

코드

#include<iostream>
#include<algorithm>
using namespace std;

int n, m;
int maze[1001][1001];
long long dp[1001][1001];

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> maze[i][j];
		}
	}
	dp[1][1] = maze[1][1];
	for (int i = 2; i <= n; i++) dp[i][1] = dp[i - 1][1] + maze[i][1];
	for (int j = 2; j <= m; j++) dp[1][j] = dp[1][j - 1] + maze[1][j];
	for (int i = 2; i <= n; i++) {
		for (int j = 2; j <= m; j++) {
			dp[i][j] = max(dp[i - 1][j] + maze[i][j], dp[i][j - 1] + maze[i][j]);
			dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + maze[i][j]);
		}
	}
	cout << dp[n][m];
}

풀이방법

dp를 이용해서 각 경로마다 얻을 수 있는 사탕의 최댓값을 갱신한다

고민과정

X

'algorithm > Dynamic Programming' 카테고리의 다른 글

[C++] BOJ 9095 1, 2, 3 더하기  (0) 2021.08.07
[C++] BOJ 1932 삼각형  (0) 2021.08.07
[C++] BOJ 1010 다리 놓기  (0) 2021.05.01
[C++] BOJ 13301 타일 장식물  (0) 2021.05.01
[C++] BOJ 9625 RIJEČI (BABBA)  (0) 2021.05.01