#include <iostream>
using namespace std;
int N, K;
int V[101], C[101];
int bag[101][1001];
int main()
{
int tc = 0;
cin >> tc;
for (int t = 1; t <= tc; t++)
{
cin >> N >> K;
for (int i = 1; i <= N; i++)
{
cin >> V[i] >> C[i];
}
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= K; j++)
{
if (V[i] > j)
bag[i][j] = bag[i - 1][j];
else
bag[i][j] = max(bag[i - 1][j], bag[i - 1][j - V[i]] + C[i]);
}
}
cout << "#" << t << " " << bag[N][K] << "\n";
}
return 0;
}
냅색 문제
1. 가방에 안넣기
▶ 안넣는 기준: 현재 부피(j)와 현재 물건의 부피(bag[i]의 V[i]) 비교
현재 부피가 현재 물건의 부피보다 작다면 애초에 가방에 넣을수없다.
2. 가방에 넣기
▶ 전 물건의 현재 부피(bag[i - 1][j])의 가치와 현재 물건을 넣었을 때의 가치(bag[i - 1][j - V[i]] + C[i])와 비교
▶ bag[i - 1][j - V[i]] → 전 물건의 부피에서 현재 물건의 부피를 뺀 후의 가치
→ 현재 물건을 넣기위해서는 현재 물건의 부피를 빼줘야함
'공부 > SWEA' 카테고리의 다른 글
SWEA 20934. 방울 마술 (C++) (0) | 2024.05.11 |
---|---|
SWEA 4615. 재미있는 오셀로 게임 (C++) (0) | 2024.05.10 |
SWEA 19113. 식료품 가게 (C++) (0) | 2024.05.10 |
SWEA 9839. 최고의 쌍 (C++) (0) | 2024.05.08 |
SWEA 11315. 오목 판정 (C++) (0) | 2024.05.08 |