# 포도주 시식 import sys input = sys.stdin.readline def solution(): n = int(input().rstrip()) lst = [0] * n for i in range(n): lst[i] = int(input().rstrip()) dp = [0] * n dp[0] = lst[0] if n >= 2: dp[1] = lst[0] + lst[1] if n >= 3: dp[2] = max(lst[0]+lst[1], lst[1]+lst[2], lst[0]+lst[2]) for i in range(3, n): dp[i] = max(dp[i-1], dp[i-2]+lst[i], dp[i-3]+lst[i-1]+lst[i]) print(dp[n-1]) return solution() """ 걸린 시간: 10분 시간 복잡도: n개의 dp 테이블을 채워야하기 때문에 O(n)이다. 해설: 2579(계단 오르기) 문제와 비슷하다. 다른 점은 1,2칸씩 가는 것이 강제되어 있지 않고, 자유롭게 칸을 왔다갓다 할 수 있다는 것이다. 하지만 최대로 마셔야하기 때문에 왔다갔다 할 필요는 없고, 3개가 연속되지 않게 최대한 촘촘하게 먹어야 한다. dp[i]는 i번째 값을 선택할 경우와 선택하지 않을 경우에 따라 max 값을 선택하면 되고, 선택하지 않을 경우 dp[i-1]에서 가져오고, 선택할 경우, 바로 앞의 잔을 마셨다면 2번째 잔을 마시지 말았어야하고(dp[i-3]+lst[i-1]+lst[i]), 바로 앞의 잔을 안 마셨다면 2번째 전에서 값(dp[i-2]+lst[i])을 가져오면 된다. """