[알고리즘] Java / 백준 / 평범한 배낭 / 12865
[알고리즘] Java / 백준 / 평범한 배낭 / 12865
문제
접근 방식
유명한 dp의 배낭문제이다
배낭의 각 무게에 대해 가장 높은 가치를 기억하면서 최대 배낭 무게까지 반복하며 배낭을 채워나간다
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
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[][] back = new int[N+1][2];
for(int i=1;i<=N;i++) {
st = new StringTokenizer(br.readLine());
int w = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
back[i]= new int[] {w,v};
}
// 가방 개수와 무게에 대한 가치 최대값
int[][] dp = new int[N+1][K+1];
// 배낭 최대 만큼 반복
for(int i =1;i<=N;i++) {
// 이전 dp 확인
for(int j=1;j<=K;j++) {
if(back[i][0] <=j) {
if(back[i][1] + dp[i-1][j-back[i][0]] > dp[i-1][j]) {
dp[i][j] = back[i][1] + dp[i-1][j-back[i][0]];
}
else {
dp[i][j] = dp[i-1][j];
}
}
else {
dp[i][j] = dp[i-1][j];
}
}
}
System.out.println(dp[N][K]);
}
}
Author And Source
이 문제에 관하여([알고리즘] Java / 백준 / 평범한 배낭 / 12865), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gandi0330/알고리즘-Java-백준-평범한-배낭-12865저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)