BOJ_G5_12865
π [G5_12865] νλ²ν λ°°λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main{
static StringTokenizer st;
static int N, K;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
st = new StringTokenizer(br.readLine(), " ");
// λ¬Όνμ μ
N = Integer.parseInt(st.nextToken());
// λ²νΈ μ μλ 무κ²
K = Integer.parseInt(st.nextToken());
// 무κ²μ κ°μΉ μ μ₯ λ°°μ΄
int[][] arr = new int[N+1][2];
// λ¬Όνμ λ¬΄κ² , 1~k κΉμ§μ λ¬΄κ² , κ°μ κ°μΉ λμ μ΄λ€
int[][] dp = new int[N+1][K+1];
for(int i=1; i<=N; i++){
st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
for(int i=1; i<=N; i++){
for(int j=1; j<=K; j++){
// λ€μ΄κ° μ μλ 무κ²μΈ κ²½μ°
if(j - arr[i][0] >= 0){
// dpμ μ μ₯λ λμ κ°κ³Ό νμ¬ μμ μ κ°μΉμ λ¨μ 무κ²μ κ°μΉλ₯Ό λΉκ΅νμ¬ ν° κ°μ μ μ₯νλ€
dp[i][j] = Math.max(dp[i-1][j], arr[i][1] + dp[i-1][j-arr[i][0]]);
}
// λ€μ΄κ° μ μλ 무κ²λ©΄ μ νμ κ°μ κ°μ Έμ¨λ€
else{
dp[i][j] = dp[i-1][j];
}
}
}
System.out.println(dp[N][K]);
}
}
π€ λμ μκ°
μ΄ λ¬Έμ λ λνμ μΈ knapsack μκ³ λ¦¬μ¦μ μ¬μ©νλ λ¬Έμ μ΄λ€.
λ¬Έμ μ 무κ²μ κ°μΉκ° λμ¨λ€λ©΄ 99% knapsack μκ³ λ¦¬μ¦μ μ¬μ©ν΄μΌνλ€.
μ΄ λ¬Έμ λ dp λ°°μ΄μ μμ΄ν
μ 무κ²μ 1~KκΉμ§μ 무κ²μ κ°μΉλ₯Ό μ μ₯νλ€.
κ°λ°©μ λ€μ΄κ° μ μλ 무κ²μ΄λ©΄ dp λ°°μ΄μ λμ κ°κ³Ό νμ¬ μμ μ κ°μΉμ λ¨μ 무κ²μ κ°μΉλ₯Ό λΉκ΅νμ¬ ν° κ°μ μ μ₯νλ€.
μ΄ κ³Όμ μ λ°λ³΅ν΄ κ°μ₯ μ΅κ³ κ°μΉλ₯Ό μΆλ ₯ν΄ λΈλ€.
μ²μμ νΉμλ ν΄μ λΆλΆμ§ν©μ ν©μΌλ‘ νμ΄λ΄€λλ° λ°λ‘ μκ°μ΄κ³Όκ° λ λ²λ Έλ€.
DPλ¬Έμ λ νμ€ν μνμ μΌλ‘ μ μκ°ν΄μ ꡬνν΄μΌνλ κ² κ°λ€. μ¬λ¬ μκ³ λ¦¬μ¦μ μκ³ μλ κ²λ μ€μνλ€ !!