


일반적인 배낭문제와 동일하다.
import java.util.Arrays;
import java.util.Scanner;
import java.util.Vector;
public class bj26582 {
static Scanner scanner = new Scanner(System.in);
static int[][] dataSet;
static int W;
public static void main(String[] args) {
int n, i, W;
n = scanner.nextInt();
for(i = 0; i < n; i++){
System.out.println("테스트케이스 " + (i+1) + "번");
inputData();
System.out.println(findAnswer());
}
scanner.close();
}
public static void inputData(){
System.out.println("inputData()");
int i, j;
int I;
I = scanner.nextInt();
W = scanner.nextInt();
System.out.println("W : " + W);
dataSet = new int[I][2];
for(i = 0;i < I; i++){
dataSet[i][0] = scanner.nextInt();
dataSet[i][1] = scanner.nextInt();
}
}
public static int findAnswer(){
System.out.println("findAnswer()");
int i, j;
int I = dataSet.length;
int [][] DP = new int[I + 1][W + 1];
int currentItemValue, currentItemWeight;
for(i = 0; i <= I; i++){
Arrays.fill(DP[i], 0);
}
for(i = 1; i <= I; i++){
currentItemValue = dataSet[i - 1][0];
currentItemWeight = dataSet[i - 1][1];
for(j = 1; j <= W; j++){
if(j - currentItemWeight >= 0){
DP[i][j] = Math.max(DP[i - 1][j], DP[i-1][j - currentItemWeight] + currentItemValue);
}
else{
DP[i][j] = DP[i - 1][j];
}
}
System.out.println(i + "회 순회");
for(int k = 1; k <= I; k++){
for(int l = 1; l <= W; l++){
System.out.print(DP[k][l] + " ");
}
System.out.println();
}
System.out.println();
}
return DP[I][W];
}
}