문제 풀이 및 개발 공간

[백준] 12865번 평범한 배낭 (gold 5 본문

백준공부/java

[백준] 12865번 평범한 배낭 (gold 5

gomduri43 2023. 9. 24. 17:43

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));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st=new StringTokenizer(br.readLine());
        int n=Integer.valueOf(st.nextToken());
        int k=Integer.valueOf(st.nextToken());

        int[] dp=new int[k+1];
        int[][] bag=new int[n][2];
        for(int i=0; i<n; i++){
            st=new StringTokenizer(br.readLine());
            bag[i][0]=Integer.valueOf(st.nextToken());
            bag[i][1]=Integer.valueOf(st.nextToken());
        }

        for(int i=0; i<n; i++){
            int w=bag[i][0];
            int v=bag[i][1];
            for(int j=k; j>=1; j--){
                if(w==j){
                    if(dp[j]==0){
                        dp[j]=v;
                    }
                    else{
                        if(w+j<=k){
                            dp[j+w]=Math.max(dp[j+w], dp[j]+v);
                        }
                        dp[j]=Math.max(dp[j],v);
                    }
                }
                else if(dp[j]!=0 && j+w<=k){
                    dp[j+w]= Math.max(dp[j+w] , dp[j]+v);
                }
            }
        }

        int max=0;
        for(Integer e : dp){
            max= max<e ? e :max;
        }
        bw.write(max+"");
        bw.flush();
    }
}