[BOJ] 12920 평범한 배낭2

Time Lapse :1hour 30min 14sec
N이하의 모든 수를 만드는 최소 조합 만들기

12920.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <vector>
using namespace std;

int main(void) {
int N, M;
int DP[10001] = {0, };
vector<int> V;
vector<int> C;
int _V, _C, _K, multi;
scanf("%d %d",&N,&M);
for(int i=1;i<=N;i++){
scanf("%d %d %d",&_V,&_C,&_K);
for(;_K>0; _K>>=1){ //_K이하의 모든 수를 만들 수 있는 조합을 최소의 갯수로 만들기
multi = _K-(_K>>1); //EX) 9라면 5 2 1 1로 9 이하의 모든 수 표현 가능
V.push_back(_V*multi);
C.push_back(_C*multi);
}
}
for(int i = 0; i< V.size();i++){
for(int j = M; j >= V[i]; j--){
DP[j] = DP[j-V[i]] + C[i] > DP[j] ? DP[j-V[i]] + C[i] : DP[j];
}
}
printf("%d\n",DP[M]);
return 0;
}
Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/23/PS/BOJ/12920/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.