코딩테스트/동적계획법
[DP] 백준 12865 평범한 배낭 C++
유(YOO)
2022. 1. 27. 12:22
https://www.acmicpc.net/problem/12865
#include<iostream>
#include<vector>
using namespace std;
int n, k, a, b, ans;
int dp[101][100001];
vector<int> W;
vector<int> V;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> k;
for (int i = 0; i < n; i++) {
cin >> a >> b;
W.push_back(a);
V.push_back(b);
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= k; j++) {
if ((i == 0)||(j == 0)) {
dp[i][j] = 0;
continue;
}
if (j < W[i-1]) { // i번 물건 미포함
dp[i][j] = dp[i - 1][j];
}
else { // i번 물건 포함
dp[i][j] = max(dp[i-1][j], V[i-1] + dp[i - 1][j - W[i-1]]);
}
}
}
cout << dp[n][k];
}