#include<iostream>
#include<algorithm>
int DP[101][100001] = {};
int W[101] = {};
int V[101] = {};
int main()
{
int N = 0;
int K = 0;
std::cin >> N >> K;
for (int i = 1; i <= N; ++i)
{
std::cin >> W[i] >> V[i];
}
// i번째 물품
for (int i = 1; i <= N; ++i)
{
// j번째 무게
for (int j = 1; j <= K; ++j)
{
// j 만큼에서 들어갈 수 있다면
// DP[i - 1][j - W[i]](i번째 물품 무게를 뺀 최댓값) + V[i](가치값)
if (j - W[i] >= 0)
DP[i][j] = std::max(DP[i - 1][j], DP[i - 1][j - W[i]] + V[i]);
// 아니라면 이전 것 그대로
else
DP[i][j] = DP[i - 1][j];
}
}
std::cout << DP[N][K];
}
DP로 계산, 2차 배열로 갯수, 무게, 가치 따로 나눠서 계산해야한다.
2중 배열로 만들고 i, j 를 갯수, 무게로 나눴고 값을 가치로 매겼다
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 2573 빙산 (0) | 2022.05.16 |
---|---|
[C++] 백준 3197 백조의 호수 (0) | 2022.05.14 |
[C++] 백준 2468 안전 영역 (0) | 2022.05.13 |
[C++] 백준 5014 스타트링크 (0) | 2022.05.13 |
[C++] 백준 1697 숨바꼭질 (0) | 2022.05.12 |