백준 2156 포도주 시식
2023. 7. 31. 20:04ㆍ코딩 공부 연습
반응형
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
long long dp[10002];
int main()
{
int n;
int podo[10002];
cin>>n;
for (int i = 1; i <= n; i++)
{
cin>>podo[i];
}
dp[0] = 0;
dp[1] = podo[1];
dp[2] = podo[2] + podo[1];
for (int i = 3; i <= n; i++)
{
dp[i] = max(dp[i-3] + podo[i-1] + podo[i], dp[i-2] + podo[i]);
dp[i] = max(dp[i], dp[i-1]);
}
cout<<dp[n];
return 0;
}
n 번째 포도주를 들고 있을 때, 이 녀석을 마실지 말지를 고민하는 방식으로 dp 식을 작성해 보았다.
먼저, n-3 번째 였을 때 dp의 결과에 포도주 n-1, n 을 더하는 방법이 한가지 있고,
두번째 방식으로는, n-2 반째 까지의 dp 에 지금 n 번째 포도주 양을 더하는 방식이 또 한가지 있겠다.
이게 다가 아니다!
지금까지 n 번째 포도주를 무조건 마시는 경우를 구한 것이기 때문에, 아예 안마신 경우가 더 큰 경우를 고려해야 한다.
따라서 dp[n-1] , dp[n] 을 서로 비교해 더 큰 걸 선택하도록 하자!
'코딩 공부 연습' 카테고리의 다른 글
백준 13023 ABCDE (0) | 2023.08.02 |
---|---|
백준 14002 가장 긴 증가하는 부분 수열 4 (0) | 2023.07.28 |
백준 10972 다음 순열, 이전 순열, 모든 순열 (0) | 2023.07.20 |
백준 NM과 K(1) (0) | 2023.07.19 |
백준 2309 일곱 난쟁이 (0) | 2023.07.16 |