본문 바로가기

ALGORITHM/DP

2156 포도주 시식

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

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net

점화식을 찾자

찾은 경우의 수는 세가지

각각

dp[i-3] + drink[i-1] + drink[i];
dp[i-2] + drink[i];
dp[i-1];

세가지 중 가장 큰 값이 정답이 된다.

 

전체코드

#include <iostream>
#include <algorithm>
using namespace std;

int n, drink[10001], dp[10001], max_drink = 0;

int main(int argc, const char * argv[]) {
    cin >> n;
    for (int i=1; i<=n; i++) {
        cin >> drink[i];
    }
    
    dp[1] = drink[1];
    dp[2] = drink[1] + drink[2];
    for (int i=3; i<=n; i++) {
        dp[i] = max(dp[i-2] + drink[i], dp[i-3] + drink[i-1] + drink[i]);
        dp[i] = max(dp[i], dp[i-1]);
    }
    
    cout << dp[n] << "\n";
    return 0;
}

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

[Swift] 5582 공통 부분 문자열 (DP)  (0) 2022.03.30
[c++] 7579 앱 (knapsack)  (0) 2021.08.10
9095 1, 2, 3 더하기  (0) 2021.01.09