알고리즘/백준

[백준 11048] 이동하기 C++

겜도리도리 2021. 9. 14. 23:52
반응형

문제

백준 11048

 

11048번: 이동하기

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

www.acmicpc.net

풀이

[i, j]에서 [i+1, j], [i][j+1], [i+1][j+1]로 이동할 수 있습니다.

[i+1][j+1]은 어차피 [i+1, j], [i][j+1]를 거쳐 이동할 수 있으므로 고려하지 않아도 됩니다.

(돌아서 갈 때 얻는 사탕이 무조건 크거나 같습니다.)

따라서 dp[i]j[j]에는 dp[i-1][j], dp[i][j-1] 중 더 큰 값에 map[i][j]를 더해준 값을 넣습니다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <algorithm>
using namespace std;
 
int map[1000][1000];
int dp[1000][1000];
int N, M;
int main()
{
    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];
            dp[i][j] = map[i][j];
            if (i - 1 >= 0) {
                dp[i][j] = max(dp[i][j], dp[i - 1][j] + map[i][j]);
            }
            if (j - 1 >= 0) {
                dp[i][j] = max(dp[i][j], dp[i][j - 1+ map[i][j]);
            }
        }
    }
    cout << dp[N - 1][M - 1];
    return 0;
}
cs
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 11051] 이항 계수 2 C++  (0) 2021.09.16
[백준 5014] 스타트링크 C++  (0) 2021.09.16
[백준 1915] 가장 큰 정사각형 C++  (0) 2021.09.13
[백준 3190] 뱀 C++  (0) 2021.09.12
[백준 14502] 연구실 C++  (0) 2021.09.11