알고리즘

[이코테/DP/C++] 효율적인 화폐구성

데메즈 2022. 12. 13. 22:34
728x90
반응형

#include <bits/stdc++.h>

using namespace std;
int n, m;
vector<int> arr;

int main(void) {
    cin >> n >> m;
    // n개의 화폐 단위정보 입력받기
    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        arr.push_back(x);
    }
    vector<int> d(m+1, 10001); //DP테이블 초기화
    d[0] = 0;

    for(int i=0; i<n; i++){
        for(int j = arr[i]; j<=n; j++){
            if(d[j-arr[i]] != 10001){// (i-k)원을 만드는 방법이 존재하는 경우
                d[j] = min(d[j], d[j - arr[i]]+1);
            }
        }
    }
    if(d[n] == 10001) cout << -1 << endl;
    else cout << d[m] << endl;
}
728x90
반응형