반응형
문제 링크 : www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
> 풀이
0부터 n까지 차근차근 쌓아가는 dp를 통해 구현했습니다. dp[n] = n번째 와인까지 마시는 최대의 경우
따라서 n 번째 잔에서 이전 잔을 마시느냐 안마시느냐 두 가지 경우의 최대를 구하는 방식을 생각했는데,
이렇게 구현하니 dp[n - 1]를 비교하지 못하더라구요. 두가지 경우의 최대를 구한 후, n - 1번째와 비교하여 n번째 잔을 마시는게 나은지, 차라리 안마시는게 나은지 비교하는게 ( max dp[i], dp[i - 1]; ) 필요했습니다.
#include <bits/stdc++.h>
using namespace std;
int N, dp[10001], wine[10001];
int main(void) {
scanf("%d", &N);
for(int i = 1; i <= N; i++) scanf("%d", &wine[i]);
dp[1] = wine[1];
dp[2] = wine[1] + wine[2];
for (int i = 3; i <= N; i++) {
dp[i] = wine[i] + max(dp[i - 2], wine[i - 1] + dp[i - 3]);
dp[i] = max(dp[i], dp[i - 1]);
}
printf("%d", dp[N]);
}
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 11053 (가장 긴 증가하는 부분수열) / C++ (0) | 2020.11.05 |
---|---|
백준 11052 (카드 구매하기) / C++ (0) | 2020.11.05 |
백준 1912 (연속합) / C++ (0) | 2020.11.05 |
백준 2583 (영역 구하기) / C++ (0) | 2020.11.02 |
백준 2636 (치즈) / C++ (0) | 2020.10.14 |