Deff_Dev
[백준] 2156번 포도주 시식 (C++) 본문
문제
https://www.acmicpc.net/problem/2156
풀이
이 문제는 DP를 이용하여 풀이했다.
점화식
- dp[i-1] : i번째 잔을 마시지 않는 경우 (최댓값이 아니라면 무한으로 건너 뛸 수 있기 때문에)
- dp[i-2] + grapes[i] : i번째 잔을 마시고, i-1번째 잔을 마시지 않는 경우
- dp[i-3] + grapes[i-1] + grapes[i] : i번째와 i-1번째 잔을 마시고, i-2번째 잔을 마시지 않는 경우
#include<iostream>
// https://www.acmicpc.net/problem/2156
using namespace std;
int grapes[10001] = {0};
int dp[10001] = {0};
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> grapes[i];
}
dp[1] = grapes[1];
if (n > 1) {
dp[2] = grapes[1] + grapes[2];
}
for (int i = 3; i <= n; i++) {
dp[i] = max({dp[i-1], dp[i-2] + grapes[i], dp[i-3] + grapes[i-1] + grapes[i]});
}
cout << dp[n] << endl;
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 카드 1 (C++) (0) | 2024.10.14 |
---|---|
[백준] 2607번 비슷한 단어 (C++) (0) | 2024.09.26 |
[백준] 1026번 보물 (C++) (0) | 2024.09.06 |
[백준] 2583번 영역 구하기 (C++) (1) | 2024.09.06 |
[백준] 좋다 (C++) (0) | 2024.09.05 |