Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

혼종 꼬지마루

[백준] 9465 - 스티커 본문

Algorithms/DP

[백준] 9465 - 스티커

꼬지마루 2018. 9. 8. 20:25

dp문제 중에 무조건 풀어야하는 기초문제인 것 같습니다.


한 열에서 스티커를 선택하지 않을 경우, 첫번째 행의 스티커를 선택할 경우, 두번째 행의 스티커를 선택할 경우로 나누어


이전 열에서 가장 큰 값을 더해주는 식으로 dp를 풀어주면 N번 연산으로 끝낼 수 있습니다.


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
29
30
31
#include <iostream>
#define SIZE 100003
#define MAX(X, Y) ((X) > (Y) ? (X):(Y))
using namespace std;
 
int map[3][SIZE], dp[3][SIZE];
int T, N;
 
int main(void)
{
    cin >> T;
    while (T--)
    {
        cin >> N;
 
        for (int i = 1; i < 3; i++)
            for (int j = 1; j <= N; j++)
            {
                cin >> map[i][j];
                dp[i][j] = 0;
            }
        for (int i = 1; i <= N; i++)
        {
            dp[0][i] = MAX(dp[0][i - 1], MAX(dp[1][i - 1], dp[2][i - 1]));
            dp[1][i] = MAX(dp[0][i - 1], dp[2][i - 1]); dp[1][i] += map[1][i];
            dp[2][i] = MAX(dp[0][i - 1], dp[1][i - 1]);    dp[2][i] += map[2][i];
        }
        cout << MAX(dp[0][N], MAX(dp[1][N], dp[2][N])) << endl;
    }
    return 0;
}
cs


'Algorithms > DP' 카테고리의 다른 글

[백준] 4095 - 최대 정사각형  (0) 2019.05.05
[백준] 15559 - 내 선물을 받아줘  (0) 2019.04.13
[백준] 1520 - 내리막길  (0) 2018.09.14
[백준] 11048 - 이동하기  (0) 2018.08.29
[백준] 15486 - 퇴사2  (7) 2018.08.27