[java] 12865번 평범한 배낭

ideal dev·2022년 12월 20일
0

코딩테스트

목록 보기
26/69

1. 문제 링크 및 문제

https://www.acmicpc.net/problem/12865

2. 해결 방법 생각해보자 ...

최대 무게가 10만이므로, dp 사용

3. 코드

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[][] arr = new int[N+1][2];
        int[][] dp = new int[N+1][K+1];
        dp[0][0] = 0;
        
        for(int i=0;i<N;i++){
            st = new StringTokenizer(br.readLine());
            arr[i][0] = Integer.parseInt(st.nextToken()); //weight
            arr[i][1] = Integer.parseInt(st.nextToken()); //value
        }

        for(int i=1;i<N+1;i++){
            int weight = arr[i-1][0];
            int value = arr[i-1][1];
            for(int j=1;j<K+1;j++){
                dp[i][j] = dp[i-1][j];
                if(j - weight < 0) continue;
                dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-weight]+value);
            }
        }
        System.out.println(dp[N][K]);
    }
}

0개의 댓글