상세 컨텐츠

본문 제목

[BJ] 12865 : 평범한 배낭

💯ProblemSolving/문제 풀이

by :Eundms 2024. 3. 1. 10:52

본문

       문제 요약        

- 문제

 

- 입출력

입력
출력

         아이디어        

 

dp[n][k] : 가방 무게를 k만큼 고려했을 때, n번째 아이템을 선택/비선택했을 때 최대 가치

 

         소스코드        

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main { //평범한 배낭
    static int N, K;
    static int[][] dp; // 가방무게 K까지 고려했을 때, 최대가치
    static int[] weight;
    static int[] value;

    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()); // 가방 무게 K
        weight = new int[N+1];
        value = new int[N+1];

        for (int n = 1; n <= N; n++) {
            st = new StringTokenizer(br.readLine());
            weight[n] = Integer.parseInt(st.nextToken());
            value[n] = Integer.parseInt(st.nextToken());
        }

        // dp[n][k] : 가방무게를 k만큼 고려했을 때, n번째 아이템을 선택/비선택했을 때 최대가치
        dp = new int[N + 1][K + 1];
        for (int i = 1; i <= N; i++) { // 아이템 i번째 선택
            for (int k = 1; k <= K; k++) { //가방 무게가 1 ~ K 까지 고려
                dp[i][k] = dp[i - 1][k];
                if (k - weight[i] >= 0)
                    dp[i][k] = Math.max(dp[i - 1][k - weight[i]] + value[i], dp[i - 1][k]);
                // Math.max(i번째 item을 선택할 경우 최대 가치, 선택하지 않을 경우 최대 가치)
                // i번쨰 item을 선택 : i-1번째 item, (k - i번째 item의 무게)가방 무게까지 고려했을 때 최대가치 + i번째 item의 무게
            }
        }
        System.out.println(dp[N][K]);
    }
}

 

 

'💯ProblemSolving > 문제 풀이' 카테고리의 다른 글

[BJ] 4179 : 불!  (0) 2024.04.07
[BJ] 9466 : 텀 프로젝트  (0) 2024.03.01
[SWEA] 사탕 가방  (0) 2024.02.19
[BJ] 21772 : 가희의 고구마 먹방  (0) 2024.02.17
[BJ] 13913 : 숨바꼭질  (0) 2024.02.17

관련글 더보기

댓글 영역