BOJ 백준 12865 : 평범한 배낭
Updated:
시작하면서
이번 문제는 Dynamic Programming 중 배낭 알고리즘(Knapsack Algorithm) 문제이다.
문제 이해
이 문제는 배낭 알고리즘이라는 정해진 틀에서 해결하는 문제이다. 다음 링크에서 설명이 잘 되어 있으니 참고 바란다.
해결
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
// sync off
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// sync off
vector<vector<int>> knapsack;
vector<int> weight, value;
int N, K;
cin >> N >> K;
weight.resize(N + 1);
value.resize(N + 1);
knapsack.resize(N + 1);
for (int i = 1; i <= N; i++)
{
cin >> weight[i] >> value[i];
}
knapsack[0].resize(K + 1);
for (int i = 1; i <= N; i++)
{
knapsack[i].resize(K + 1);
for (int j = 0; j <= K; j++)
{
knapsack[i][j] = knapsack[i - 1][j];
if (j - weight[i] >= 0)
{
int compareValue = knapsack[i - 1][j - weight[i]] + value[i];
knapsack[i][j] = max(knapsack[i][j], compareValue);
}
}
}
cout << knapsack[N][K];
return 0;
}
Leave a comment