[snippet] knapsack.py

Yongjun Park·2022년 7월 13일
0

백준 12865번. 평범한 배낭에 대한 풀이를 0-1 Knapsack Problem의 스니펫 느낌으로 작성.

import sys
input = lambda: sys.stdin.readline().rstrip()

N, K = map(int, input().split())
arr = [(0, 0)] # 1-indexed
for _ in range(N):
    W, V = map(int, sys.stdin.readline().rstrip().split())
    arr.append((W, V))

#####################################
    
# y축: 몇번 물건(1~N)까지 고려했는지, x축: 현재 가방의 무게(1~K)
dp = [[0]*(K+1) for _ in range(N+1)] # 1-indexed, 2D

for i in range(1, N+1):
    w, v = arr[i]
    for j in range(1, K+1):
        if j-w < 0:
            dp[i][j] = dp[i-1][j]
            continue
        dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v) # i번 물건을 패스한다/넣는다

print(dp[N][K])

#####################################
profile
추상화되었던 기술을 밑단까지 이해했을 때의 쾌감을 잊지 못합니다

0개의 댓글