평범한 배낭(12865)
대표적인 DP 문제 중 하나인 "냅색 문제"
Last updated
대표적인 DP 문제 중 하나인 "냅색 문제"
Last updated
14import 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 W = Integer.parseInt(st.nextToken());
int dp[][] = new int[N+1][N+1];
int ws[] = new int[N];
int vs[] = new int[N];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine(), " ");
ws[i] = Integer.parseInt(st.nextToken());
vs[i] = Integer.parseInt(st.nextToken());
}
int max = 0;
int tmp=0;
for(int i=1; i<=N; i++){
for(int j=i; j<=N; j++){
tmp+=ws[j-1];
if(tmp<=W){
dp[i][j] = dp[i][j-1]+vs[j-1];
max = Math.max(max, dp[i][j]);
}
}
tmp = 0;
}
// for (int i = 0; i < N+1; i++) {
// for (int j = 0; j < N+1; j++) {
// System.out.print(dp[i][j]+" ");
// }
// System.out.println();
// }
System.out.println(max);
}
}0 0 13 8 6 12
1 0 13 0 0 0
2 0 0 8 14 0
3 0 0 0 6 0
4 0 0 0 0 12import 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 W = Integer.parseInt(st.nextToken());
int ws[] = new int[N+1];
int vs[] = new int[N+1];
for(int i=1; i<=N; i++){
st = new StringTokenizer(br.readLine(), " ");
ws[i] = Integer.parseInt(st.nextToken());
vs[i] = Integer.parseInt(st.nextToken());
}
int dp[][] = new int[N+1][W+1];
for(int i=1; i<=N; i++){
for(int j=1; j<=W; j++){
//기본적으로 이전 아이템의 가치를 저장한다
dp[i][j] = dp[i-1][j];
if(j >= ws[i]){
//점화식
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-ws[i]]+vs[i]);
}
}
}
System.out.println(dp[N][W]);
}
}