BOJ

백준 11048 - 이동하기

yanJuicy 2020. 3. 4. 14:43
반응형

문제

 

https://www.acmicpc.net/problem/11048

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마다 방에 놓여져있는 사탕을 모두 가져갈 수 있다. 또, 미로 밖으

www.acmicpc.net

 

 

풀이

 

(1,1)에서 (N,M)까지 이동해야 하는 문제이고 이동가능한 방향은 오른쪽, 아래, 오른쪽 대각선 아래 방향 세 가지 경우이다. 이걸 반대로 생각하면 (i,j)로 이동할 수 있는 점은 (i, j-1), (i-1, j), (i-1, j-1) 세 가지가 된다. 이 세가지 경우 중에서 최대를 골라 (i, j)에 더해주면 (N,M)까지 이동하는 최대값이 된다. 이 과정을 (N,M)까지 이어 가면 된다.

 

 

코드

 

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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int N, M;
int dp[1001][1001];
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    cin >> N >> M;
 
    for (int i=1; i<=N; i++)
        for (int j=1; j<=M; j++
            cin >> dp[i][j];
 
    for (int i=1; i<=N; i++)
        for (int j=1; j<=M; j++)
            dp[i][j] += max(dp[i-1][j-1], max(dp[i-1][j], dp[i][j-1]));
 
    cout << dp[N][M];
 
    return 0;
}
cs

 

반응형

'BOJ' 카테고리의 다른 글

백준 1783 - 병든 나이트  (0) 2020.03.06
백준 2225 - 합분해  (0) 2020.03.05
백준 9935 - 문자열 폭발  (0) 2020.03.03
백준 1932 - 정수 삼각형  (0) 2020.02.28
백준 1874 - 스택 수열  (0) 2020.02.24