https://www.acmicpc.net/problem/12865
일반적인 배낭 문제로 1차원 DP로 풀이가 가능했다.
D[무게] = {최대Value}
입력받은 V, W 값을 기준으로 각 무게별 Item을 추가했을때 최대 가치를 구하도록 했음.
코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, K;
static int[] D;
public static void main(String[] args) throws IOException {
//System.setIn(new FileInputStream("res/input_boj12865.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine().trim(), " ");
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
D = new int[K+1];
D[0] = 0;
int w, v;
int result = 0;
for (int i = 0; i < N ; i++) {
st = new StringTokenizer(br.readLine().trim(), " ");
w = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
for (int j = K-w; j > -1 ; j--) {
D[j+w] = Math.max(D[j+w], D[j]+v);
if(result<D[j+w]) result = D[j+w];
}
}
System.out.println(result);
}
}