17. Unbounded Knapsack
• 무게와 가격이 각각 𝑤𝑖와 𝑣𝑖인 𝑛개의 물건
이 있다. 무게의 총합이 𝑊를 초과하지 않
도록 물건을 선택했을 때, 가격 총합의 최
대값을 구하라. (단, 같은 종류의 물건을 몇
개라도 고르는 것이 가능하다)
• 1 <= 𝑛 <= 1000
• 1 <= 𝑤𝑖, 𝑣𝑖 <= 1000
• 1 <= 𝑊 <= 10000
18. Unbounded Knapsack
• 𝑑𝑝[𝑖][𝑗] : 1 ~ 𝑖번 물건을 고려하여 무게 합이
𝑗가 되도록 선택했을 때 최대 가격
• 𝑑𝑝[0][0] = 0, 𝑑𝑝[0][𝑖] = −∞ (0 < 𝑖 <= 𝑛)
• 𝑑𝑝[𝑖][𝑗] = max ( 𝑑𝑝[𝑖 – 1][𝑗 – 𝑘 ∗ 𝑠𝑖] +
𝑘 ∗ 𝑣𝑖) (𝑘 >= 0)
시간복잡도 O(𝑛𝑊K
)
𝐾를 없앨 수는 없을까?
32. Knapsack 마무리
• 최대/최소 외에도 경우의 수/판정 문제 등
다양한 곳에 응용 가능
• 𝑛, 𝑤, 𝑣 등 인자의 범위에 따라 dp식을 다르
게 정의
– 𝑛이 매우 작고 𝑤, 𝑣가 매우 큰 경우 dp로 불가
=> meet in the middle
• 그 외에도 다양한 냅색 유형 / 최적화 방법
존재함