개발세발은 안되요

[C++] BJO 2156 : 포도주 시식 본문

알고리즘/백준

[C++] BJO 2156 : 포도주 시식

금호박 2026. 1. 16. 13:59

문제

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

 

 

 

풀이

연속 3개의포도주를 마실 수 없기 때문에 이 부분을 고려해 점화식을 세운다.

자세한 내용은 코드를 참고하면 된다.

 

 

코드

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

long n, ans;
long grape[10001];
long dp[10001];
int main() {
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> grape[i];
    }
    dp[0] = grape[0];
    dp[1] = grape[1]+grape[0];
    dp[2] = max(grape[0]+grape[2], grape[1]+grape[2]);

    ans = max(dp[1], dp[2]);
    
    for(int i=3; i<n; i++){
        dp[i] = max(dp[i-2]+grape[i]  , dp[i-3]+grape[i-1]+grape[i]);
        if(i >= 4){
            dp[i] = max(dp[i], grape[i]+grape[i-1]+dp[i-4]);
        }
        dp[i] = max(dp[i-1], dp[i]);
        ans = max(dp[i], ans);
    }
    cout << ans << "\n";
    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[C++]BJO 15886 : 내 선물을 받아줘2  (0) 2026.01.20
[C++] BJO 9251 : LCS  (0) 2026.01.19
[C++]BJO : 1117 : 색칠 1  (0) 2026.01.15
[C++] BJO 1058 : 친구  (0) 2026.01.14
[C++] BJO 1101 : 카드 정리1  (0) 2026.01.13