๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

๋™์  ๊ณ„ํš๋ฒ•๊ณผ Knapsack ๋ฌธ์ œ

by eunyoung 2022. 12. 29.

๐Ÿ—ฏ๏ธ knapsack ๋ฌธ์ œ

๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์˜ ์ตœ์ ์˜ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฐฐ๋‚ญ์ด ์ฃผ์–ด์ง€๊ณ  ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์˜ ๋ฌด๊ฒŒ์™€ ์ตœ๋Œ€๊ฐ€์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„๋•Œ ์ฃผ์–ด์ง„ ๋ฌด๊ฒŒ๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ์ตœ๋Œ€์˜ ๊ฐ€์น˜๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”Ž DP๋กœ ํ’€์–ด๊ฐ€๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋กœ, DP๋ฌธ์ œ์˜ ๋Œ€ํ‘œ์ ์ธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ๊ฐ„๋‹จํ•œ ๋Œ€ํ‘œ ๋ฌธ์ œ๋กœ ์‚ดํŽด๋ณด๋ฉด

 

(๋ฌธ์ œ)

์ตœ๊ณ  17kg์˜ ๋ฌด๊ฒŒ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ฐฉ์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ 3kg, 4kg, 7kg, 8kg, 9kg์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์ง„ 5์ข…๋ฅ˜์˜ ๋ณด์„์ด ์žˆ๋‹ค. 
์ด ๋ณด์„๋“ค์˜ ๊ฐ€์น˜๋Š” ๊ฐ๊ฐ 4,5,10,11,13์ด๋‹ค. ์ด ๋ณด์„์„ ๊ฐ€๋ฐฉ์— ๋‹ด๋Š”๋ฐ 17kg๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ์ตœ๋Œ€์˜ ๊ฐ€์น˜๊ฐ€ ๋˜๋„๋ก ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ๋‹ด์•„์•ผ ํ• ๊นŒ์š”? ๊ฐ ์ข…๋ฅ˜๋ณ„ ๋ณด์„์˜ ๊ฐœ์ˆ˜๋Š” ๋ฌดํ•œ์ด ๋งŽ๋‹ค. ํ•œ ์ข…๋ฅ˜์˜ ๋ณด์„์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

 

(์ž…๋ ฅ)

์ฒซ ๋ฒˆ์งธ ์ค„์€ ๋ณด์„ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์˜ ํ•œ๊ณ„๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ๊ฐ ๋ณด์„์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ฐ€๋ฐฉ์˜ ์ €์žฅ๋ฌด๊ฒŒ๋Š” 1000kg์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋ณด์„์˜ ๊ฐœ์ˆ˜๋Š” 30๊ฐœ ์ด๋‚ด์ด๋‹ค.

 

 

(์ถœ๋ ฅ)

์ฒซ ๋ฒˆ์งธ ์ค„์— ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ณด์„์˜ ์ตœ๋Œ€๊ฐ€์น˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

(ํ’€์ด)

import sys

input=sys.stdin.readline

cnt,weight=map(int,input().split())
dy=[0]*(weight+1)

for _ in range(cnt):
    w,v=map(int,input().split())
    for j in range(w,weight+1):
        dy[j]=max(dy[j],dy[j-w]+v)

print(dy[weight])

 

 

(์„ค๋ช…)

dy[x]์˜ ๊ฐ’์€ ๋ฐฐ๋‚ญ์ด x ๋ฌด๊ฒŒ๋ฅผ ๊ฐ€์งˆ๋•Œ ๊ฐ€์ง€๋Š” ์ตœ๋Œ€๊ฐ€์น˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

dy์˜ ์—…๋ฐ์ดํŠธ ์‹œ์ ์€

  • ๊ธฐ์กด์˜ dy[j]์˜ ๊ฐ’๊ณผ ์ƒˆ๋กœ ํƒ์ƒ‰ํ•œ ๋ณด์„ w๊ฐ€ ์ƒˆ๋กœ ๋“ค์–ด์˜จ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ๋ฅผ ๋น„๊ตํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ์ƒˆ๋กœ ๋“ค์–ด์˜จ ๋ณด์„์˜ ๋ฌด๊ฒŒ(w)๊ฐ€ 3์ด๋ผ๊ณ  ํ•˜๊ณ  ๋ณด์„์˜ ๊ฐ€์น˜(v)๊ฐ€ 8์ด๋ผ๊ณ  ํ•˜๋ฉด, ์ƒˆ๋กœ ๋“ค์–ด์˜จ ๋ณด์„์„ ์ œ์™ธํ•œ ์ตœ๋Œ€ ๋ฌด๊ฒŒ dy[j-w]์—๋‹ค๊ฐ€ v์˜ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

โž• ๋Œ€ํ‘œ๋ฌธ์ œ

๋ฐฑ์ค€ 12865๋ฒˆ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ  https://www.acmicpc.net/problem/12865

 

 

 

์ฐธ๊ณ 


https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8/dashboard