728x90
반응형
문제: https://www.acmicpc.net/problem/2156
사용 알고리즘: DP
n 개의 포도주를 처음부터 차례로 돌면서 먹을지 안 먹을지 결정
- i 번째 포도주를 먹지 않는다 -> dp[i-1]
- i 번째 포도주를 먹는다
- i-1 번째 포도주를 먹는 경우 (직전 포도주를 먹는 경우) -> dp[i] = dp[i-3] + wine[i-1] + wine[i]
- i-2 번째 포도주를 먹는 경우 (전전 포도주를 먹는 경우) -> dp[i] = dp[i-2] + wine[i]

점화식: dp[i] = max(진전 포도주를 먹는 경우, 안먹는 경우, 전전 포도주를 먹는 경우) (i > 2)
-> dp[i] = max(dp[i-3] + wine[i-1] + wine[i], dp[i-1], dp[i-2] + wine[i])
import sys
n = int(sys.stdin.readline())
wine = [0] * 10001 # 인덱스 1 부터 사용
for i in range(1, n+1):
wine[i] = int(sys.stdin.readline())
# i 번째 잔에 도달 했을 때 먹을 수 있는 포도주의 최대량
dp = [0] * (n+1)
# 초기화
dp[1] = wine[1]
if n >= 2:
dp[2] = wine[1] + wine[2]
for i in range(3, n+1):
dp[i] = max(dp[i-2] + wine[i], dp[i-1], dp[i-3] + wine[i-1] + wine[i])
print(dp[n])
728x90
반응형
'백준' 카테고리의 다른 글
[백준/python] 15665 - N과 M (11) (0) | 2024.06.04 |
---|---|
[백준/python] 9205 - 맥주 마시면서 걸어가기 (0) | 2024.05.20 |
[백준/python] 1463 - 1로 만들기(DP) (0) | 2024.05.20 |
[Beakjoon/백준] 2579 파이썬 (0) | 2024.05.14 |
[Beakjoon/백준] 백준 허브 설정 방법 (0) | 2024.01.11 |