Algorithms/Dynamic Programming
[DP 알고리즘] 포도주 시식 S1
잉숭
2021. 7. 19. 17:55
기출 : BOJ #2156
D[n][m] : n번째 포도주에 대해 연속으로 m개 선택한 경우 포도주의 양
D[n][2] = D[n-1][1] + 포도주[i]
D[n][1] = D[n-1][0] + 포도주[i]
D[n][0] = max(D[n-1])
n = int(input())
val = list()
val.append(0)
for _ in range(n):
val.append(int(input()))
d = [[0, 0, 0] for _ in range(n+2)]
d[1][0] = val[0]
d[1][1] = val[1]
d[1][2] = val[1]
if n>=2:
d[2][0] = val[1]
d[2][1] = val[2]
d[2][2] = val[1] + val[2]
for i in range(3, n+1):
d[i][0] = max(d[i-1])
d[i][1] = d[i-1][0] + val[i]
d[i][2] = d[i-1][1] + val[i]
print(max(d[n]))