DP๊ฐ ๋ฌด์์ธ์ง ์ค๋ง๋ฆฌ๋ฅผ ์ก๊ณ ์ถ๋ค๋ฉด
์ ์์์ ์ถ์ฒํฉ๋๋ค.
๐ก ๋ฐฑ์ค 12865๋ฒ
๐ # ๋ฌธ์ : ํ๋ฌ๊ฐ๊ธฐ ๐
์ด ๋ฌธ์ ๋ ์์ฃผ ํ๋ฒํ ๋ฐฐ๋ญ์ ๊ดํ ๋ฌธ์ ์ด๋ค.
ํ ๋ฌ ํ๋ฉด ๊ตญ๊ฐ์ ๋ถ๋ฆ์ ๋ฐ๊ฒ ๋๋ ์ค์๋ ์ฌํ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ธ์๊ณผ์ ๋จ์ ์ ์ฌํผํ๋ฉฐ ์ต๋ํ ์ฆ๊ธฐ๊ธฐ ์ํ ์ฌํ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ง๊ณ ๋ค๋ ๋ฐฐ๋ญ ๋ํ ์ต๋ํ ๊ฐ์น ์๊ฒ ์ธ๋ ค๊ณ ํ๋ค.
์ค์๊ฐ ์ฌํ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋ N๊ฐ์ ๋ฌผ๊ฑด์ด ์๋ค. ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W์ ๊ฐ์น V๋ฅผ ๊ฐ์ง๋๋ฐ, ํด๋น ๋ฌผ๊ฑด์ ๋ฐฐ๋ญ์ ๋ฃ์ด์ ๊ฐ๋ฉด ์ค์๊ฐ V๋งํผ ์ฆ๊ธธ ์ ์๋ค. ์์ง ํ๊ตฐ์ ํด๋ณธ ์ ์ด ์๋ ์ค์๋ ์ต๋ K๋งํผ์ ๋ฌด๊ฒ๋ง์ ๋ฃ์ ์ ์๋ ๋ฐฐ๋ญ๋ง ๋ค๊ณ ๋ค๋ ์ ์๋ค. ์ค์๊ฐ ์ต๋ํ ์ฆ๊ฑฐ์ด ์ฌํ์ ํ๊ธฐ ์ํด ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ ๊ฐ์น์ ์ต๋๊ฐ์ ์๋ ค์ฃผ์.
โจ๏ธ # ์ ๋ ฅ
์ฒซ ์ค์ ๋ฌผํ์ ์ N(1 ≤ N ≤ 100)๊ณผ ์ค์๊ฐ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ K(1 ≤ K ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W(1 ≤ W ≤ 100,000)์ ํด๋น ๋ฌผ๊ฑด์ ๊ฐ์น V(0 ≤ V ≤ 1,000)๊ฐ ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ ์ ์์ด๋ค.
๐จ๏ธ # ์ถ๋ ฅ
ํ ์ค์ ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ ๊ฐ์นํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์ด ๋ฌธ์ ๋ ๋ํ์ ์ธ ๋ฐฐ๋ญ(knapsack) ๋ฌธ์ ์ ๋๋ค.
๋ฌด๊ฒ ์ ํ์ด ์ฃผ์ด์ง ๋ฐฐ๋ญ์ ์ฌ๋ฌ ๋ฌผ๊ฑด์ ๋ฃ์ด ์ด ๊ฐ์น๋ฅผ ์ต๋๋ก ๋ง๋๋ ๋ฌธ์ ์ ๋๋ค.
๋ฐฐ๋ญ ๋ฌธ์ ์์๋
1. ์ง์ ์ชผ๊ฐ์ด(ํ ์ง์ ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ๋ง) ๋ฃ์ ์ ์๋ ์ ํ์ด ์๊ณ (Fractional ์ ํ์ด๋ผ๊ณ ํฉ๋๋ค.)
2. ์ง์ ์ชผ๊ฐ์ด ๋ฃ์ ์ ์๋ ์ ํ์ด ์์ต๋๋ค. (๋ฃ๊ฑฐ๋ ๋ง๊ฑฐ๋, 0-1 ์ ํ์ด๋ผ๊ณ ํฉ๋๋ค.)
๋ณดํต ์ฒซ ๋ฒ์งธ ์ ํ์์๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๊ณ , ๋ ๋ฒ์งธ ์ ํ์์๋ DP๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฒ ๋ฌธ์ ์ญ์ ์ง์ ์ชผ๊ฐ ๋ฃ์ ์ ์๋ ๋ฌธ์ ๋ก, DP๋ฅผ ์ฌ์ฉํด ํ ์ ์์ต๋๋ค.
DP(๋์ ํ๋ก๊ทธ๋๋ฐ)๋ก ํ๊ธฐ
์ด DP๋ ๋ฌด์์ผ๊น์?
ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์,
๊ฒน์น๋ ๋ถ๋ถ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ฌํ์ฉํ๋ ๋ฐฉ์
์๋ฅผ ๋ค์ด ํผํฌ๋์น ์์ด `f(n) = f(n-1) + f(n-2)`๋ผ๊ณ ํ ๋
n๋ฒ์งธ ํญ์ ๊ตฌํ ๋ n-2๋ฒ์งธ ํญ๋ค์ ์ด๋ฏธ ๊ณ์ฐ์ ํ์ ๊ฒ๋๋ค. ๋งค๋ฒ ์๋กญ๊ฒ ๊ณ์ฐํ ํ์๋ ์์ต๋๋ค.
์ด์ฒ๋ผ ๋๊ฐ์ ๊ฐ์ ์ฌ๋ฌ ๋ฒ ๊ณ์ฐํ์ง ์๊ธฐ ์ํด ์ ์ฅํด๋๋ ๊ฒ์ด DP์ ๋๋ค.
์ฝ๋ฉํ ์คํธ์์ ๊ธฐ๋ณธ์ ์ธ DP๋ฅผ ํธ๋ ๊ณต์์ ๋๋ฆ๋๋ก ์ธ์๋ดค์ต๋๋ค.
<๐ก DP ๋ฌธ์ ํธ๋ ๊ณต์>
| 1. ํฐ ๋ฌธ์ ์ ์์ ๋ฌธ์ ์ ์ํ๊ธฐ 2. 2์ฐจ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ DP ํ ๋ง๋ค๊ธฐ 3. ์ ํ์ ์ธ์ฐ๊ธฐ(์์ ๋ฌธ์ ๋ฅผ ์ด์ฉํด ํฐ ๋ฌธ์ ๋ฅผ ํ ์ ์๋๋ก) 4. ์ ํ์์ ๋ฐ๋ผ DP ํ ์ฑ์๊ฐ๊ธฐ 4. ํ๋ฅผ ๋ณด๊ณ ๋ต ์ฐพ๊ธฐ |
๋ฐฑ์ค 12865๋ฒ์์
ํฐ ๋ฌธ์ ๋ ๋ฌธ์ ๊ทธ ์์ฒด์ธ, N๊ฐ์ ๋ฌผ๊ฑด ์ค ์ผ๋ถ๋ฅผ ๊ณจ๋ผ์ ์ด ๋ฌด๊ฒ <= k์ธ ๋ฐฐ๋ญ์ ๋ฃ์์ ๋ ๊ฐ์น์ ์ต๋๊ฐ์ ๋๋ค.
์ด ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๋ฌธ์ ๋ก ๋๋์ด ์๊ฐํ ์ ์์ต๋๋ค.
์ด๋ ์์ ๋ฌธ์ ๋ ๊ฐ ์ง์ ์์๋ฅผ ๋งค๊ฒจ๋๊ณ , ์ฒซ๋ฒ์งธ๋ถํฐ i๋ฒ์งธ๊น์ง ๋ฌผ๊ฑด ์ค์ ๊ณ ๋ คํ์ ๋ ๋ฌด๊ฒ ์ ํ์ ์งํค๋ฉด์ ์ป์ ์ ์๋ ์ต๋ ๊ฐ์น๊ฐ ๋ฉ๋๋ค.
(์ฒซ๋ฒ์งธ๋ถํฐ i๋ฒ์งธ๊น์ง ๋ฌผ๊ฑด์ ๋ค ๋ฃ๋ ๊ฒ ์๋๋ผ ๊ทธ ์ค์์ ๊ฐ์น๊ฐ ๊ฐ์ฅ ํฐ ์กฐํฉ์ผ๋ก ๊ตฌํ ๊ฐ์น์ ๊ฐ๋ง ๊ธฐ์ตํ๋ฉด ๋ฉ๋๋ค.)
์ฆ, ๋งค๋ฒ "์ด ๋ฌผ๊ฑด์ ๋ฃ์๊น? ๋ง๊น?"๋ฅผ ๊ฐ์น์ ์ดํฉ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ํ๋ ๋ฌธ์ ์ ๋๋ค.
์์ ๋ฌธ์ ๋ฅผ ํ์ด์ ๊ตฌํ ๊ฐ๋ค์ ์ ์ฅํด๊ฐ๋ฉฐ ํฐ ๋ฌธ์ ๋ฅผ ํ๋๋ค.
์์์ ํผ ๊ฐ์ ์ ์ฅํ๋ ๊ณณ์ด ๋ฐ๋ก DP ํ์ ๋๋ค.
๋ณดํต 2์ฐจ์ ๋ฐฐ์ด ํํ๋ก ๋ง์ด ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผํ๋ ๊ฑด ๊ฐ์น์ ์ต๋๊ฐ์ด๋๊น, ๊ฐ ์์๋ ๊ฐ์น์ ํฉ์ด๋ผ๊ณ ํฉ์๋ค.
์ด๋ ์กฐ๊ฑด์ด 1~i๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋, ๋ฌด๊ฒ ์ ํ w๋ฅผ ์งํค๋ฉด์๋๊น
ํ์ ๋ฌผ๊ฑด, ์ด์ ํ์ฌ ๋ฃ์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ๋ผ๊ณ ๊ณ ๋ คํด๋ด ์๋ค.
๋ฌผ๊ฑด์ ์ต๋ N๊ฐ์ด๋ 1๋ฒ ๋ฌผ๊ฑด๋ถํฐ N๋ฒ ๋ฌผ๊ฑด๊น์ง ์์ ๊ฒ๋๋ค.
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ์ฌ 0๋ฒ ๋ฌผ๊ฑด๋ถํฐ N-1๋ฒ ๋ฌผ๊ฑด๊น์ง ์๋ค๊ณ ์๊ฐํฉ์๋ค.
| ํ(row) | ์๋ฏธ |
| i(0~N-1) | ๋ฌผ๊ฑด i๋ฒ์งธ๊น์ง ๊ณ ๋ ค |
| w(0~k) | ํ์ฌ ๋ฐฐ๋ญ ๋ฌด๊ฒ ์ ํ |
์ฆ, dp[i][w] = "์์์๋ถํฐ i๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ์กฐํฉ์ ๊ณ ๋ คํ์ ๋ ๋ฌด๊ฒ w ์ดํ๋ก ๋ฃ์ ๋ ์ต๋ ๊ฐ์น"๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ผ ์ด DP ํ๋ฅผ ์ฑ์๋๊ฐ๊ธฐ ์ํ ๊ท์น, ์ ํ์์ ์ธ์๋ด ์๋ค.
๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ์ ๊ฐ์น๊ฐ ์์๋๋ก ๊ฐ๊ฐ W, V ๋ฐฐ์ด์ ์ ์ฅ๋์ด ์๋ค๊ณ ํฉ์๋ค.
ํต์ฌ์ ์ธ ๋ด์ฉ์, "i๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ์๊น, ๋ง๊น?"์ ๋๋ค.
- i๋ฒ์งธ ๋ฌผ๊ฑด์ด ์ต๋ ๋ฌด๊ฒ ์ ํ๋ณด๋ค ์ปค์ ๋ฃ์ ์ ์๋ค๋ฉด
- ๊ฐ์น๊ฐ ์ถ๊ฐ๋์ง ์์ต๋๋ค = ์ด์ i-1๋ฒ์งธ๊น์ง ์ป์ ์ต๋์น ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- ๋ฃ์ ์ ์๋ค๋ฉด, ๋ฃ์์ ๋์ ์ ๋ฃ์์ ๋ ๋ ์ข์ ๊ฒฝ์ฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์ด ๋ฌผ๊ฑด์ ๋ฃ์ ๋, ๊ฐ์น๊ฐ ์ต๋๊ฐ ๋๋ค๋ฉด
- ์ ์ฒด ๋ฌด๊ฒ์์ ์ด ๋ฌผ๊ฑด์ ๋ฌด๊ฒ๋ฅผ ๋นผ๊ณ ๋จ์ ๋ฌด๊ฒ์์ ์ป์ ์ ์๋ ์ต๋์น๋ฅผ ์ฐพ๊ณ , ๊ทธ ๊ฐ์ ํ์ฌ ๋ฌผ๊ฑด์ ๊ฐ์น๋ฅผ ๋ํ๋ค
- ์ด ๋ฌผ๊ฑด์ ๋ฃ์ ๋, ๊ฐ์น๊ฐ ์ต๋๊ฐ ์๋๋ผ๋ฉด
- ์ด์ i-1๋ฒ์งธ๊น์ง ์ป์ ์ต๋์น ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- ์ ๋ ์ค ๋ ํฐ ๊ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- ์ด ๋ฌผ๊ฑด์ ๋ฃ์ ๋, ๊ฐ์น๊ฐ ์ต๋๊ฐ ๋๋ค๋ฉด
if(W[i] > w) { // i๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฐฐ๋ญ์ ๋ฃ์ ์ ์๋๊ฐ? = ๋ฌด๊ฒ ์ ํ์ ์งํค๋๊ฐ
// ๋ชป ๋ฃ๋๋ค๋ฉด ์ด์ i-1๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ ์ต๋์น์ ๋๊ฐ์ด
dp[i][w] = dp[i-1][w];
} else {
// ๋ฌผ๊ฑด์ ๋ฃ๊ฒ ๋๋ค๋ฉด 2๊ฐ์ง ๊ฒฝ์ฐ ์ค ๋ ํฐ ๊ฐ์ผ๋ก
// i๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ๋ ๊ฒฝ์ฐ -> ๋จ์ ๋ฌด๊ฒ(w-W[i]) ์ ํ์ ์งํค๋ฉด์ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ๊ฐ์น + i๋ฒ์งธ ๋ฌผ๊ฑด์ ๊ฐ์น
// i๋ฒ์งธ ๋ฌผ๊ฑด์ ์ ๋ฃ๋ ๊ฒฝ์ฐ > i-1๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ ๊ฒฝ์ฐ์ ๋์ผํ ๊ฐ์ผ๋ก
dp[i][w] = max(dp[i-1][w], dp[i-1][w-W[i]] + V[i]);
}
์ดํด๊ฐ ์ ๋๋ค๋ฉด ์์๋ฅผ ๋ณด๋ฉด์ ์ดํดํด๋ณด์ธ์ ใ ใ
์์์ ์ธ์ด ์ ํ์์ผ๋ก ํ๋ฅผ ์ฑ์๋๊ฐ๋๋ค.
์ฝ๋ฉํ ์คํธ๋ฅผ ํ ๋๋ ๋ฐ๋ก ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ธ์ด ์ ํ์์ด ๋ง๋์ง ํ์ธํ ๊ฒธ
๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ด ๋๋ค.
๋ค์ ์์ ๋ฅผ ์ฌ์ฉํด๋ด ์๋ค.

ํ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์์ต๋๋ค.
ํ์๋ ์ด๋ค ๋ฌผ๊ฑด์ ๋ฃ์๋์ง ์ํด i๋ฒ์งธ ๋ฌผ๊ฑด์, ์ด์๋ ๋ฌด๊ฒ๋ฅผ ํ์ํฉ๋๋ค.
์ต๋ ๊ฐ๋ฅํ ๋ฌด๊ฒ๊ฐ 0์ผ ๋ ์ป์ ์ ์๋ ๊ฐ์น๋ถํฐ ๋ชฉํ์ธ 7์ผ ๋ ์ป์ ์ ์๋ ๊ฐ์น๊น์ง ๋ชจ๋ ๊ณ์ฐํฉ๋๋ค.

๋ฌด๊ฒ๊ฐ 0์ด๊ฑฐ๋ 1 ๋๋ 2์ผ ๋๋ ๋ค์ด๊ฐ ์ ์๋ ๋ฌผ๊ฑด์ด ์์ด 0์ผ๋ก ๋ฏธ๋ฆฌ ์ฑ์๋จ์ต๋๋ค.
๊ทธ๋ผ ์ต๋ ๋ฌด๊ฒ w=3์ผ ๋๋ ์ด๋ป๊ฒ ๋ ๊น์?

2๋ฒ์งธ ๋ฌผ๊ฑด์ด ๋ฌด๊ฒ๊ฐ 3์ผ๋ก ๋ฐฐ๋ญ์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด 2๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ์์ ๋ ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋ฉ๋๋ค.
๋ฌด๊ฒ๊ฐ 3์ผ ๋ 1๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ ์ต๋์น๋ 0์ด๊ณ ,
๋จ์ ๋ฌด๊ฒ 0์ผ๋ก 2๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋์ ํ์ฌ 2๋ฒ์งธ ๋ฌผ๊ฑด์ ๊ฐ์ ๋ํ ๊ฐ์ 6์ด๋ฏ๋ก ๋ ํฐ 6์ด ์ฑ์์ง๋๋ค.
if(W[i] > w) {
dp[i][w] = dp[i-1][w];
} else {
dp[i][w] = max(dp[i-1][w], dp[i-1][w-[W[i]] + V[i]);
}
---------------------------------------------------
i = 2, w = 3;
W[i] = 3, V[i] = 6;
if(W[2] > 3) {
dp[2][3] = dp[1][3];
} else {
dp[2][3] = max(dp[1][3], dp[1][3-3] + 6);
}

3๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ์ ๋๋
๋ฌด๊ฒ๊ฐ 5์ธ ๋ฌผ๊ฑด์ ๋ฃ์ ์ ์์ผ๋ 2๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋ ์ป์ ์ ์๋ ์ต๋๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.

์์์ ํ๋ ๊ฒ์ฒ๋ผ dp[1][4]๊น์ง ์ฑ์๋๋ค.

2๋ฒ์งธ ๋ฌผ๊ฑด๋ 1๋ฒ์งธ ๋ฌผ๊ฑด์ฒ๋ผ ๋ฐฐ๋ญ์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
์ด๋ฌ๋ฉด ์ด๋ค ๊ฐ์ด ์ต๋์ธ์ง ๋น๊ตํด์ผ ํฉ๋๋ค.
์ด์ 1๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋ ๊ฐ = 8 vs ํ์ฌ ๋ฌผ๊ฑด์ ๊ฐ์น(6) + ๋จ์ ๋ฌด๊ฒ 1์์ 1๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋ ์ต๋์น(dp[1][0]) = 6 ์ผ๋ก max = 8์ด ๋ฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ์ฑ์์ง ํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๋ต์ ๋ฌด๊ฒ 7์์ 3๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๋ชจ๋ ๊ณ ๋ คํ ๊ฐ์น์ ์ต๋์น 14๊ฐ ๋ฉ๋๋ค.
์ฝ๋๋ก ์์ฑํด๋ดค์ต๋๋ค.
import java.util.*;
import java.lang.Math;
public class Main {
public static void main(String[] args) {
// ์ด๊ธฐ ์
๋ ฅ
Scanner sc = new Scanner(System.in);
int itemNumbers = sc.nextInt();
int maxWeight = sc.nextInt();
int[] itemWeights = new int[itemNumbers];
int[] itemValues = new int[itemNumbers];
for(int i=0; i<itemNumbers; i++) {
itemWeights[i] = sc.nextInt();
itemValues[i] = sc.nextInt();
}
// dp ํ ์ฑ์ฐ๊ธฐ
int[][] dp = new int[itemNumbers][maxWeight+1];
for(int w=0; w<maxWeight+1; w++) {
for(int i=0; i<itemNumbers; i++) {
if(itemWeights[i] <= w) {
int unincludedValue = (i>=1)? dp[i-1][w]:0;;
int includedValue = itemValues[i] + ((i>=1)? dp[i-1][w-itemWeights[i]]:0);
dp[i][w] = Math.max(unincludedValue, includedValue);
} else {
dp[i][w] = (i>=1)? dp[i-1][w]:0;
}
}
}
System.out.println(dp[itemNumbers-1][maxWeight]);
}
}
