Post

배낭 문제 (Knapsack Algorithm) (Incomplete)

Knapsack Algorithm



0/1 Knapsack Algorithm



Link
12865번 : 평범한 배낭

image


W[i] = i번째 물건의 무게, V[i] = i번째 물건의 가치

dp[i][w] = i번째 물건까지 보고 무게를 w만큼 채웠을 때 가치의 최대값

여기서 우리는 현재 가방에 i번째 물건을 넣었을 때의 가치와 넣지 않았을 때의 가치를 비교해 볼 것임.
dp[i][w]= max(dp[i-1][w], dp[i-1][w-W[i]))


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
int dp[101][100001];
int W[101];
int V[101];

int main()
{
    int N, K; cin >> N >> K;
    for(int i=1; i<=N; ++i) { cin >> W[i] >> V[i]; }

    for(int i=1; i<=N; ++i)
    {
        for(int w=0; w<W[i]; ++w)
        {
            dp[i][w] = dp[i-1][w];
        }
        for(int w=W[i]; w<=K; ++w)
        {
            dp[i][w] = max(dp[i-1][w], dp[i-1][w-W[i]] + V[i]);
        }
    }
    cout << dp[N][K] << '\n';
}






This post is licensed under CC BY 4.0 by the author.