실버1 : 동적계획법 문제이다.
생각
dp[i] : i번째 포도주의 위치에서 마실 수 있는 최대 포도주 양
i번째 포도주의 포도주 양은 세가지 경로에서 답을 찾을 수 있다.
- dp[i-3] + input[i-1] + input[i]
- dp[i-2] + input[i]
- dp[i-1]
Code
//
// main.cpp
// test2
//
// Created by 최완식 on 2021/03/29.
//
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int N = 0;
int input[10002];
int dp[10002];
int max_value(int a, int b){
if (a > b) {
return a;
}
return b;
}
int main(){
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> input[i];
}
dp[1] = input[1];
dp[2] = input[1] + input[2];
dp[3] = max(max(dp[1] + input[3], input[2] + input[3]), dp[2]);
for (int i = 4; i <= N; i++) {
dp[i] = max(max(dp[i-3] + input[i-1] + input[i],dp[i-2] + input[i]), dp[i-1]);
}
cout << dp[N] << endl;
return 0;
}