ALGORITHM
백준 12865 평범한 배낭 (Java)
공부하는_다온
2023. 4. 18. 19:12
1. 문제 링크
12865번: 평범한 배낭
첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
전형적인 DP 문제이다.
해당 무게가 되는지 여부를 알고 지금 물건의 가치가 더 높은지 판단해서 저장한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] split = br.readLine().split(" ");
int N = Integer.parseInt(split[0]); //물건 개수
int W = Integer.parseInt(split[1]); //가방 최대 무게
int[] weight = new int[N+1];
int[] value = new int[N+1];
for(int i=0;i<N;i++) {
split = br.readLine().split(" ");
weight[i+1] = Integer.parseInt(split[0]);
value[i+1] = Integer.parseInt(split[1]);
}
int[][] D = new int[N+1][W+1];
for(int i=1;i<N+1;i++) { //물건
for(int w=1;w<W+1;w++) { //가방 무게
//해당 물건의 무게가 w를 초과하는지
if(weight[i]>w) {
D[i][w] = D[i-1][w];
}
else {
D[i][w] = Math.max(D[i-1][w], value[i]+D[i-1][w-weight[i]]);
}
}
}
System.out.println(D[N][W]);
}
}