https://www.acmicpc.net/problem/12865
12865๋ฒ: ํ๋ฒํ ๋ฐฐ๋ญ
์ฒซ ์ค์ ๋ฌผํ์ ์ N(1 ≤ N ≤ 100)๊ณผ ์ค์๊ฐ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ K(1 ≤ K ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ W(1 ≤ W ≤ 100,000)์ ํด๋น ๋ฌผ๊ฑด์ ๊ฐ์น V(0 ≤ V ≤ 1,000)
www.acmicpc.net
๐น๏ธ Knapsack ์๊ณ ๋ฆฌ์ฆ ๊ณผ์
DP ๋ฌธ์ ์ค ํ๋๋ก, ๋ฐฐ๋ญ์ ํฌ๊ธฐ k์ n๊ฐ์ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ(w)์ ๊ฐ์น(v)๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ๋ฐฉ์ ๋ฌผ๊ฑด์ k์ ๋์ง ์๋๋ก ๋ฃ๊ณ ์ต๋ ๊ฐ์น์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ex) ๋ฐฐ๋ญ์ ํฌ๊ธฐ๋ k์ด๊ณ , 5๊ฐ์ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ์ ๊ฐ์น๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ก์ ๋, ์ต๋ ๊ฐ์น์ ํฉ์ ๊ตฌํ๊ธฐ
- ๋ฌผ๊ฑด 1 : w = 3, v = 8
- ๋ฌผ๊ฑด 2 : w = 1, v = 5
- ๋ฌผ๊ฑด 3 : w = 2, v = 7
- ๋ฌผ๊ฑด 4 : w = 2, v = 2
- ๋ฌผ๊ฑด 5 : w = 2, v = 6
- ๋ฌผ๊ฑด 1๋ง ๋ฐฐ๋ญ์ ๋ฃ์์ ๊ฒฝ์ฐ
- ๋ฌผ๊ฑด 2๋ ๋ฐฐ๋ญ์ ๋ฃ์์ ๊ฒฝ์ฐ
- ๋ฌผ๊ฑด 5๊น์ง ๋ชจ๋ ๋ฃ์์ ๊ฒฝ์ฐ
์ ํ์
โก๏ธ ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ ๊ฒฝ์ฐ (j<w)
๐dp[i][j] = dp[i-1][j]
โก๏ธ ๋ฌผ๊ฑด์ ๋ด์ ์ ์๋ ๊ฒฝ์ฐ (j>=w โ else)
๐dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);
๐ฉ๐ป Knapsack ๊ตฌํ ์ฝ๋
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[][] dp = new int[n+1][k+1];
int[] w = new int[n+1];
int[] v = new int[n+1];
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
w[i] = Integer.parseInt(st.nextToken());
v[i] = Integer.parseInt(st.nextToken());
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if (w[i] <= j) {
dp[i][j] = Math.max(dp[i-1][j-w[i]]+v[i], dp[i-1][j]);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
System.out.print(dp[n][k]);
}
}
'์๊ณ ๋ฆฌ์ฆ > ๐๏ธ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Topological Sort (์์์ ๋ ฌ) (1) | 2024.02.27 |
---|---|
Simulation - 2์ฐจ์ ๋ฌํฝ์ด ๋ฐฐ์ด ๐ (0) | 2024.02.08 |
LIS (์ต์ฅ์ฆ๊ฐ๋ถ๋ถ์์ด) (1) | 2023.12.07 |
MST(์ต์์ ์ฅํธ๋ฆฌ) - ํฌ๋ฃจ์ค์นผ & ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (1) | 2023.10.23 |
Bellman-Ford (๋ฒจ๋ง-ํฌ๋) (0) | 2023.09.08 |