본문 바로가기

코딩테스트 대비

평범한 배낭 문제

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

 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

https://chanhuiseok.github.io/posts/improve-6/

 

[알고리즘 트레이닝] 5장 - 동적계획법과 냅색(Knapsack) (백준 12865번 평범한 배낭 문제로 살펴보기)

컴퓨터/IT/알고리즘 정리 블로그

chanhuiseok.github.io

#include <iostream>
#include <stdio.h>

#define max_size 101

using namespace std;

int main(){
    int n, k;
    int w[max_size], v[max_size];
    
    int dp[max_size][100001];

    cin >> n >>k;

    for(int i=1; i<n+1; i++){
        cin >> w[i] >> v[i];
    }

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

    cout <<dp[n][k];
    return 0;
}