Menu
CoddyTech

0/1 Knapsack Problem

n개의 물건이 있습니다. 물건 i의 무게는 weights[i]이고 가치는 values[i]입니다. 가방에는 최대 capacity의 총 무게까지 담을 수 있습니다. 각 물건은 하나씩만 있으며, 물건을 통째로 넣거나 남겨 두어야 합니다. 담을 수 있는 최대 총가치를 반환하세요.

함수

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
각 항목의 가중치
valuesinteger-array
각 항목의 값
capacityinteger
가방이 운반할 수 있는 최대 무게
반환값integer
용량을 초과하지 않는 무게의 항목들로 얻을 수 있는 총 가치의 최댓값

제약 조건

  • 1 ≤ n ≤ 100, 여기서 n = weights.length = values.length
  • 1 ≤ weights[i] ≤ 1000
  • 1 ≤ values[i] ≤ 104
  • 1 ≤ capacity ≤ 1000

예제

입력
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
출력
17
설명
항목 0과 2의 무게는 4 + 3 = 7이고 가치는 10 + 7 = 17입니다. 가장 가치가 높은 항목(무게 5, 가치 12)을 먼저 넣으면 항목 1만 넣을 수 있어 총 가치는 16입니다.
challenge icon

후속 질문

용량은 10^9까지 커질 수 있고 값의 합은 최대 10^4라고 가정해 봅시다. 표의 인덱스는 무엇을 기준으로 정해야 할까요?

코드 초기화
def knapsack(weights, values, capacity):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

weights = [4, 2, 3, 5]
values = [10, 4, 7, 12]
capacity = 7

예상 출력

17