1. 입력 n 과 k를 받음
2. n개 만큼 무게와 가치의 pair를 받음
3. dp배열을 nxk크기로 만듦
4. 물건을 가져가기로 선택했을 때 얻는 가치를 배열에 넣어줌, 안가져가면 이전 배열의 값을 넣어줌
5. dp[i][j] = max(dp[i-1][j], i위치의 가치 + dp[i-1][j-i의 무게])
https://github.com/o920/baekjoon/blob/master/12865.cpp
#include <iostream>
#include <algorithm>
using namespace std;
pair<int, int> N[100];
int dp[100][100001];
int main() {
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> N[i].first >> N[i].second;
for (int i = 0; i <= k; i++) {
if (N[0].first <= i)dp[0][i] = N[0].second;
else dp[0][i] = 0;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j <= k; j++) {
if (N[i].first <= j) dp[i][j] = max(dp[i - 1][j], N[i].second + dp[i - 1][j - N[i].first]);
else dp[i][j] = dp[i - 1][j];
}
}
cout << dp[n - 1][k] << endl;
}
(이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.)
'코테' 카테고리의 다른 글
백준 11399 : ATM c++ 정답(그리디 알고리즘) (0) | 2020.03.25 |
---|---|
백준 11047 : 동전 0 c++ 정답 (0) | 2020.03.23 |
백준 1912 : 연속합 c++ 정답 (배열 이용) (0) | 2020.03.23 |
백준 11054 : 가장 긴 바이토닉 부분 수열 C++ 정답&해설 (0) | 2020.03.17 |
백준 11650 좌표 정렬하기 c++ 정답 (pair 사용) (0) | 2020.03.12 |