반응형
문제
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 |