hwooo
BOJ (C/C++) 2156번: 포도주 시식 본문
https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net

풀이
3잔을 연속으로 마시면 안 되므로 3번째 잔부터 조건을 고려해줌
?OOX - DP[i-1]
?XOO - DP[i-3]+wine[i-1]+wine[i]
?OXO - DP[i-2]+wine[i]
i번째 순서에 최대값이 나올 조건은 위의 3개이므로 이를 고려하여 DP로 코드를 구현
밑의 링크의 설명이 자세해서 문제 풀 때 도움을 많이 얻었다!
https://yabmoons.tistory.com/512
[ 백준 2156 ] 포도주 시식 (C++)
백준의 포도주 시식(2156) 문제이다.[ 문제 바로가기 ] [ 문제풀이 ]간단한 예시를 통해서, 포도주를 어떻게 마셨을 때, 가장 최대로 마실 수 있는지 알아보자.5개의 포도주 잔이 있고, 그 5개의 잔
yabmoons.tistory.com
코드
#include <stdio.h>
int Max(int a, int b) {
if (a > b) return a;
return b;
}
int main() {
int n;
int wine[10000], DP[10000];
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] = Max(DP[i - 1], Max(DP[i - 3] + wine[i - 1] + wine[i], DP[i - 2] + wine[i]));
}
printf("%d", DP[n - 1]);
return 0;
}
'Study > Algorithm' 카테고리의 다른 글
BOJ (C/C++) 14496번: 그대, 그머가 되어 (0) | 2023.04.25 |
---|---|
BOJ (C/C++) 3055번: 탈출 (0) | 2023.03.25 |
BOJ (C/C++) 1707번: 이분 그래프 (0) | 2023.03.23 |
BOJ (C/C++) 2250번: 트리의 높이와 너비 (0) | 2023.01.24 |
BOJ (C/C++) 16236번: 아기 상어 (0) | 2023.01.24 |