코드
#include <iostream>
using namespace std;
bool compare(int a, int b){
return a > b;
}
int main(){
int n, k;
int price[101];
int dp[10001];
cin >> n >> k;
for(int i = 1; i <=k; i++){
dp[i] = 10001;
}
for(int i = 0; i < n; i++){
cin >> price[i];
for(int j = price[i]; j <= k; j++){
dp[j] = min(dp[j], dp[j-price[i]]+1);
}
}
if(dp[k]==10001) cout << -1;
else cout << dp[k];
return 0;
}
알게된점
2중반복문으로 구하는 dp는 생각하기 너무 어려운 것 같다.
다음에 한번 더 풀어보면서 복습해보아야겠다.
dp[j] = min(dp[j], dp[j-price[i]]+1); 이 수식을 생각하는게 참 어려운 것 같다.
'하루하나코딩' 카테고리의 다른 글
백준 11047 : 동전 0 c++ (0) | 2023.01.13 |
---|---|
백준 2133 : 타일채우기 (0) | 2023.01.13 |
백준 9461 : 파도반 수열 c++ (0) | 2023.01.12 |
백준 2293 : 동전 1 c++ (0) | 2023.01.11 |
백준 9465 : 스티커 c++ (0) | 2023.01.10 |