코딩고치

[백준][DP] 포도주 시식 본문

백준 알고리즘 기초/다이내믹 프로그래밍

[백준][DP] 포도주 시식

코딩고치 2020. 3. 25. 22:02

1. 문제 주소

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

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고

www.acmicpc.net

2. 문제

i번째 포도주 잔에 대하여 다음과 같이 3가지 상황을 고려하여 코드를 작성하였다.

1. i번째 포도주 잔을 선택하지 않을 때

2. i번째 포도주 잔을 선택하고 i-1번째 포도주 잔을 선택하지 않을 때

3. i번째, i-1번째 포도주 잔을 선택하고 i-2번째 포도주 잔을 선택하지 않을 때

3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
int wine_amount[10001];
int dp[10001];
 
int main() {
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i++)
        cin >> wine_amount[i];
    
    dp[1= wine_amount[1];
    dp[2= dp[1+ wine_amount[2];
 
    for (int i = 3; i <= n; i++) {
        dp[i] = max(dp[i - 1], max(dp[i - 2+ wine_amount[i], dp[i - 3+ wine_amount[i - 1+ wine_amount[i]));
    }
    cout << dp[n] << '\n';
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

Comments