프로그래밍/문제풀이

백준 2156(포도주 시식)

하용권 2018. 11. 3. 23:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(){
    int n;
    int f[100001];
    int dp[100001];
    cin >> n;
    for(int i = 1; i<= n;i++cin >> f[i];
    dp[1= f[1];
    dp[2= f[1]+f[2];
    for(int i = 3; i <=n; i++){
        dp[i]= max(dp[i-2]+f[i],dp[i-3]+f[i-1]+f[i]);
        dp[i] = max(dp[i],dp[i-1]);
    }
    cout << dp[n];
    
}
cs



점화식 : 

i 번째를 마시지 않은 경우 : dp[i] = dp[i-1]

i 번째를 마시고, 그 전 것도 마신 경우 : dp[i] = dp[i-3]+f[i-1]+f[i]

i 번째를 마시고, 그 다음 것을 마실 경우 :dp[i] = dp[i-2] + f[i]      

반응형