https://www.acmicpc.net/problem/2156
점화식을 찾자
찾은 경우의 수는 세가지
각각
dp[i-3] + drink[i-1] + drink[i];
dp[i-2] + drink[i];
dp[i-1];
세가지 중 가장 큰 값이 정답이 된다.
전체코드
#include <iostream>
#include <algorithm>
using namespace std;
int n, drink[10001], dp[10001], max_drink = 0;
int main(int argc, const char * argv[]) {
cin >> n;
for (int i=1; i<=n; i++) {
cin >> drink[i];
}
dp[1] = drink[1];
dp[2] = drink[1] + drink[2];
for (int i=3; i<=n; i++) {
dp[i] = max(dp[i-2] + drink[i], dp[i-3] + drink[i-1] + drink[i]);
dp[i] = max(dp[i], dp[i-1]);
}
cout << dp[n] << "\n";
return 0;
}
'ALGORITHM > DP' 카테고리의 다른 글
[Swift] 5582 공통 부분 문자열 (DP) (0) | 2022.03.30 |
---|---|
[c++] 7579 앱 (knapsack) (0) | 2021.08.10 |
9095 1, 2, 3 더하기 (0) | 2021.01.09 |