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]      

반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

백준 2193 (이친수)  (0) 2018.11.06
백준 10844 (쉬운 계단 수)  (0) 2018.11.06
백준 1107 (리모컨)  (0) 2018.11.03
백준 1652 (누울 자리를 찾아라)  (0) 2018.11.03
백준 9095 (1,2,3 더하기)  (0) 2018.10.31

+ Recent posts