https://www.acmicpc.net/problem/12865
해설
이번 문제는 일정한 무게와 가치가 주어질 때, 가치의 합이 최대가 되면서 짐을 고르게 하는 전형적인 냅색 문제이다.
max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]) |
냅색 점화식
소스코드
#include <iostream>
#include <algorithm>
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 ww = 0; ww < w[i]; ww++)
dp[i][ww] = dp[i - 1][ww];
for (int j = w[i]; j <= k; j++)
dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]);
}
cout << dp[n][k] << '\n';
}
'백준 문제 풀이' 카테고리의 다른 글
[백준 5397] 키로거 (0) | 2020.03.31 |
---|---|
[백준 11053] 가장 긴 증가하는 부분 수열 (0) | 2020.03.30 |
[백준 9252] LCS 2 (0) | 2020.03.30 |
[백준 9251] LCS (0) | 2020.03.28 |
[백준 2294] 동전 2 (0) | 2020.03.27 |
댓글