[BOJ] 포도주 시식

Date:

[BOJ] 포도주 시식

Problem URL : 포도주 시식

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

int arr[10001];
int dp[10001];

int main() {
    int n;
    scanf("%d",&n);

    for (int i = 1; i <= n; i++)
        scanf("%d", arr + i);

    dp[1] = arr[1];
    dp[2] = arr[1] + arr[2];
    for (int i = 1; i <= n; i++) {
        /*포도주 i,(i-1),(i-2)를 기준으로 i만 포함하는 경우, i와 (i-1) 2개 포함하는 경우, 
        (i-1)과 (i-2) 2개 포함하는 경우 3가지 중에서 최댓값을 dp[i]로 한다. */
        dp[i] = max(dp[i - 1], max(dp[i - 2], dp[i - 3] + arr[i - 1]) + arr[i]);
    }

    printf("%d", dp[n]); // dp[x] > dp[x-1]이 항상 성립한다.
    return 0;
}

댓글