https://www.acmicpc.net/problem/2156
2156호: 와인 테이스팅
효주가 와인 시음회에 갔다. 내가 거기에 갔을 때 테이블 위에 다른 와인이 담긴 와인 잔이 있었다. 효주가 와인 테이스팅을 하는데 규칙이 두 가지 있다.
www.acmicpc.net

설명
3잔을 연속으로 마시면 안 되므로 3잔을 마신 후 상태에 주의한다.
?OOX-DP(i-1)
?XOO – DP(i-3)+와인(i-1)+와인(i)
?OXO – DP(i-2)+와인(i)
i번째 최대값에 대한 조건은 위의 3가지이므로 이러한 조건을 고려하여 DP로 코드를 구현한다.
아래 링크에 설명이 자세히 나와 있어서 문제 해결에 많은 도움을 받았습니다!
( 백준 2156 ) 와인 시음(C++)
백준의 와인 테이스팅(2156) 문제다.
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;
}