https://www.acmicpc.net/problem/2156
1차원 DP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | n = int(input()) WINE = [0]+[int(input()) for _ in range(n)] DP = [0] * (n+1) DP[1] = WINE[1] if n >= 2: DP[2] = WINE[1]+WINE[2] # n 이 2보다 작을 땐 런타임에러 발생(index error) for i in range(3, n+1): DP[i] = DP[i-1] DP[i] = max(DP[i], DP[i-2]+WINE[i]) DP[i] = max(DP[i], DP[i-3]+WINE[i]+WINE[i-1]) print(DP[n]) | cs |
2차원 DP
1
2
3
4
5
6
7
8
9
10
|
n = int(input())
WINE = [0]+[int(input()) for _ in range(n)]
DP = [[0]*3 for _ in range(n+1)]
for i in range(1, n+1):
DP[i][0] = max(DP[i-1][0], DP[i-1][1], DP[i-1][2])
DP[i][1] = DP[i-1][0]+WINE[i]
DP[i][2] = DP[i-1][1]+WINE[i]
print(max(DP[n]))
|
cs |
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python]14002. 가장 긴 증가하는 부분 수열 4 (LIS) (0) | 2019.04.05 |
---|---|
[Python]11053. 가장 긴 증가하는 부분 수열 (LIS) (0) | 2019.04.05 |
[Python]9465. 스티커 (0) | 2019.04.04 |
[Python]10844. 쉬운 계단 수 (0) | 2019.04.04 |
[Python]15990. 1,2,3 더하기 5 (2) | 2019.04.03 |
댓글