본문 바로가기

ProgramSoliving

백준 : 12865

반응형

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

0 - 1 냅색 문제이다.

dp[i][k] = max(dp[i-1][k],dp[i-1][k-Weight[i]]) 이다.

물건은 하나밖에없다 . 따라서 배낭에 하나넣으면 같은 물건은 더넣을수가 없는 전제이다. 

그래서 0 - 1 냅색  

dp는 1~N 까지의 물건들을 배낭에 넣을때 

1. 현재 넣을수 있는가 없는가를 판단한다 넣을수없다면 dp[i-1][j] 가 최대치가 된다.

2. 현재물건을 넣을수 있다면 dp[i-1][j] 이전 재료들로 뽑앗던 최대치와 dp[i-1][j-weight[i]] + P[i] 이전 재료에서 현재물건을 넣을수 있는 공간을 뺀 최대치와 현재물건의 가치의 합중에 더큰것을 선택하면 가장 큰 가치의 물건을 뽑을수가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package day0301;
 
 
public class B12865 {
    static int Weight[];
    static int P[];
    static int dp[][];
    static int N,K;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        
        P = new int[N+1];
        dp = new int[N+1][K+1];
        Weight = new int[N+1];
        for(int n=1;n<=N;n++) {
            st = new StringTokenizer(br.readLine());
        
            Weight[n] = Integer.parseInt(st.nextToken()); 
            P[n] = Integer.parseInt(st.nextToken()); 
        }
        
        for(int i=1;i<=N;i++) {
            
            for(int k=1;k<=K;k++) {
                if(Weight[i] > k) {
                    dp[i][k] = dp[i-1][k];
                }else {
                    dp[i][k] = Math.max(dp[i-1][k], dp[i-1][k-Weight[i]]+P[i]);
                }
            }
            
        }
        
        System.out.println(dp[N][K]);
        
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
반응형

'ProgramSoliving' 카테고리의 다른 글

Sqrt Decomposition  (0) 2020.03.01
백준 : 1655  (0) 2020.03.01
백준 : 5214  (0) 2020.03.01
백준 : 9328  (0) 2020.02.29
백준 : 1938  (0) 2020.02.29