BOJ (C/C++) No. 2156: 와인 테이스팅

https://www.acmicpc.net/problem/2156

2156호: 와인 테이스팅

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

www.acmicpc.net


BOJ (C/C++) No. 2156: 와인 테이스팅 1


BOJ (C/C++) No. 2156: 와인 테이스팅 2


쉬운 목차

설명

3잔을 연속으로 마시면 안 되므로 3잔을 마신 후 상태에 주의한다.

?OOX-DP(i-1)

?XOO – DP(i-3)+와인(i-1)+와인(i)

?OXO – DP(i-2)+와인(i)

i번째 최대값에 대한 조건은 위의 3가지이므로 이러한 조건을 고려하여 DP로 코드를 구현한다.

아래 링크에 설명이 자세히 나와 있어서 문제 해결에 많은 도움을 받았습니다!

https://yabmoons.512

( 백준 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;
}