๐ฏ๏ธ 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
์ฐธ๊ณ
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 9742๋ฒ - ์์ด (ํ์ด์ฌ) (0) | 2023.01.30 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ์์ ์ฐพ๊ธฐ(์์ ํ์) (0) | 2023.01.15 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ชจ์์ฌ์ (์์ ํ์)(ํ์ด์ฌ) (0) | 2023.01.14 |
ํ๋ก๊ทธ๋๋จธ์ค - ํผ๋ก๋(์์ ํ์)(ํ์ด์ฌ) (0) | 2023.01.12 |
LIS(Longest Increasing Subsequence) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.12.28 |