์ด ๋ฌธ์ ๋ ์ ๋ช ํ ๋ฐฐ๋ญ ๋ฌธ์ (Knapsack Problem)์ด๋ค.
- ๋ฐฐ๋ญ์ ์ง์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ(k)๊ฐ ์ ํด์ ธ ์์
- ์ง๋ค์ ๋ชจ๋ ๊ฐ๊ฐ์ ๋ฌด๊ฒ(w)์ ๊ฐ์น(v)๋ฅผ ๊ฐ๊ณ ์์
- ๊ฐ์นํฉ์ด ์ต๋๊ฐ ๋๋๋ก ์ง๋ค์ ์ด๋ป๊ฒ ๋ด์์ง ๊ฒฐ์ ํ๋ ๋ฌธ์
- ์กฐํฉ ์ต์ ํ ๋ฌธ์
๋ฐฐ๋ญ ๋ฌธ์ ๋ ์ง์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ(์ง์ ๋ฌด๊ฒ๊ฐ ์์)์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ(์ง์ ๋ฌด๊ฒ๊ฐ ์์ ์ ์)๋ก ๋๋๋ค.
- ๋ถํ ๊ฐ๋ฅ ๋ฐฐ๋ญ๋ฌธ์ (Fractional Knapsack problem): ์ง์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ. ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํผ๋ค
- 0-1 Knapsack problem: ์ง์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ. ๋์ ๊ณํ๋ฒ(DP)์ผ๋ก ํผ๋ค
์ด ๋ฌธ์ ๋ ์ง์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก DP๋ก ํ์ด์ผํ๋ค
๋จผ์ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ์ ๊ฐ์น๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ๋ค
w[5]
0 | 1 | 2 | 3 | 4 |
0 | 6 | 4 | 3 | 5 |
v[5]
0 | 1 | 2 | 3 | 4 |
0 | 13 | 8 | 6 | 12 |
DP[n+1][k+1] (n: ๋ฌผ๊ฑด ๋ฒํธ, k: ๋ฐฐ๋ญ์ ์ต๋ ๋ฌด๊ฒ)
n \ k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | |||||||
2 | |||||||
3 | |||||||
4 |
0) 0๋ฒ์งธ ํ์ 0์ผ๋ก ์ด๊ธฐํํด์ค๋ค
n \ k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 13 | 13 |
2 | |||||||
3 | |||||||
4 |
1) ์ฒซ๋ฒ์งธ ๋ฌผ๊ฑด (n=1)
k=1~5
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋๋ณด๋ค ํฌ๋ฏ๋ก ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๋ด์ง ์์์ ๋์ ๊ฐ์น(DP[0][1] ~ DP[0][5])๋ฅผ ๊ทธ๋๋ก ์ ์ด์ค๋ค.
k=6,7
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ <= ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋์ด๋ฏ๋ก ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๋ด์์ ๋์ ๊ฐ์น๋ 13, ๋ฌผ๊ฑด์ ๋ด์ง ์์์ ๋์ ๊ฐ์น๋ 0์ด๋ค.
-๋ ์ค ํฐ ๊ฐ์ ์ ์ด์ค๋ค
n \ k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 13 | 13 |
2 | 0 | 0 | 0 | 8 | 8 | 13 | 13 |
3 | |||||||
4 |
2) ๋ ๋ฒ์งธ ๋ฌผ๊ฑด (n=2)
k=1~3
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋๋ณด๋ค ํฌ๋ฏ๋ก ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๋ด์ง ์์์ ๋์ ๊ฐ์น(DP[1][1] ~ DP[1][3])๋ฅผ ๊ทธ๋๋ก ์ ์ด์ค๋ค.
k=4
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ <= ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋. ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๋ด์์ ๋์ ๊ฐ์น๋ 8, ๋ฌผ๊ฑด์ ๋ด์ง ์์์ ๋์ ๊ฐ์น๋ DP[1][4]=0์ด๋ค.
-๋ ์ค ํฐ ๊ฐ์ ์ ์ด์ค๋ค
k=5
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ <= ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋. ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๊ฐ๋ฐฉ์ ๋ฃ์ผ๋ฉด, ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋์ด 1์ด ๋จ๋๋ค.
-์ด๋ ๊ฒ ๋ฌผ๊ฑด์ ๋ฃ๊ณ ๋ ๊ฐ๋ฐฉ ์ฉ๋์ด ๋จ์ ๋์๋, ํ์ฌ ๋ฌผ๊ฑด์ ๋ด๊ธฐ ์ ์ํฉ์์ ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋์ด 1์ผ ๊ฒฝ์ฐ์ ๊ฐ์น๋ ๋ํด์ค์ผ ํ๋ค!! ์ด ๊ฐ์ ์์์ ๊ตฌํ๋ค (DP[1][1])
-๋ฐ๋ผ์ ๋ฌผ๊ฑด์ ๊ฐ๋ฐฉ์ ๋ด๋ ๊ฒฝ์ฐ์ ๊ฐ์น๋ 8 + DP[1][1] = 8, ๋ฌผ๊ฑด์ ๋ด์ง ์์์ ๋์ ๊ฐ์น๋ DP[1][5]=0
-๋ ์ค ํฐ ๊ฐ์ ์ ์ด์ค๋ค
k=6
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ <= ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋. ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๊ฐ๋ฐฉ์ ๋ฃ์ผ๋ฉด, ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋์ด 2 ๋จ์ผ๋ฏ๋ก ๊ฐ์น ๊ณ์ฐํ ๋ DP[1][2]๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค
-๋ฌผ๊ฑด์ ๊ฐ๋ฐฉ์ ๋ด๋ ๊ฒฝ์ฐ์ ๊ฐ์น๋ 8+DP[1][2]=8, ๋ด์ง ์์์ ๋์ ๊ฐ์น๋ DP[1][6]=13
-๋ ์ค ํฐ ๊ฐ์ ์ ์ด์ค๋ค
k=7
-๋ฌผ๊ฑด์ ๋ฌด๊ฒ <= ๊ฐ๋ฐฉ์ ์ต๋ ์ฉ๋. ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ค.
-๋ฌผ๊ฑด์ ๋ด๋ ๊ฒฝ์ฐ์ ๊ฐ์น: 8 + DP[1][3] = 8, ๋ด์ง ์์์ ๋์ ๊ฐ์น๋ DP[1][7]=13
-๋ ์ค ํฐ ๊ฐ์ ์ ์ด์ค๋ค.
์ ๋ฆฌํ๋ฉด,
(1) w[n] > k ์ธ ๊ฒฝ์ฐ, DP[n][k] = DP[n-1][k]
(2) w[n]<=k์ธ ๊ฒฝ์ฐ, DP[n][k] = max( DP[n-1][k-w[n]] + v[n] , DP[n-1][k] )
์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฐ์ด์ ๋ชจ๋ ์ฑ์์ค๋ค
n \ k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 13 | 13 |
2 | 0 | 0 | 0 | 8 | 8 | 13 | 13 |
3 | 0 | 0 | 6 | 8 | 8 | 13 | 14 |
4 | 0 | 0 | 6 | 8 | 12 | 13 | 14 |
์ด ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ์ ๋ต
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]1890๋ฒ: ์ ํ (0) | 2023.02.14 |
---|---|
[๋ฐฑ์ค]11048๋ฒ: ์ด๋ํ๊ธฐ (0) | 2023.02.12 |
[๋ฐฑ์ค]10844๋ฒ: ์ฌ์ด ๊ณ๋จ์ (0) | 2023.02.11 |
[๋ฐฑ์ค] 11057๋ฒ : ์ค๋ฅด๋ง ์ (0) | 2023.02.10 |
[๋ฐฑ์ค] 1463๋ฒ : 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.01.20 |