[백준 BOJ_12865] 평범한 배낭 Python 풀이

출처: 백준 온라인 저지

문제

image

풀이

동적계획법을 이용하여 풀어주었습니다.

cache는 다음과 같습니다.

cache[i][j] = i번째 물건까지 고려했을 때, 최대 j 무게를 가지는 물건의 가치 최대 합

물건의 무게(W)와 가치(V)를 입력받고, 1부터 K까지 돌려주며

  • j가 W보다 클 때
    • 고려해준 물건이 한 개일 경우는 그냥 그 물건의 가치를 저장합니다.
    • 그렇지 않을 경우에는 이전 물건까지의 가치 중, j-W 무게의 가치에서 현재 물건의 가치를 포함하는 값과 현재 물건을 포함하지 않는 경우를 비교하여 더 큰 값으로 저장해줍니다.
  • j가 W보다 작을 때
    • 이전 물건까지의 가치 중 같은 무게의 값을 저장해줍니다.

마지막에는 cache[N][K]를 출력해줍니다.

코드

import sys
input = sys.stdin.readline
N, K = map(int, input().split())
cache = [[0 for _ in range(K+1)] for _ in range(N+1)]
for i in range(1, N+1):
    W, V = map(int, input().split())
    for j in range(1, K+1):
        if j >= W:
            cache[i][j] = V if i == 1 else max(cache[i-1][j-W]+V, cache[i-1][j])
            continue
        cache[i][j] = cache[i-1][j]
print(cache[N][K])

Leave a comment