#include <functional>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 最少货币数
     * @param arr int整型vector the array
     * @param aim int整型 the target
     * @return int整型
     */
    int minMoney(vector<int>& arr, int aim) {
        // write code here
        if(aim<1) return 0;
        int n = arr.size();
        auto cmp = [](const int &a,const int &b){return a>b;};//a>b为真,a的优先级低放前面所以是降序。
        sort(arr.begin(),arr.end(),cmp);
        // sort(arr.begin(),arr.end(),std::greater<int>());
        vector<int >dp(aim+1,aim+1);
        dp[0] = 0;
        for(int i=1;i<aim+1;i++) for(int j=0;j<n;j++) if(arr[j]<=i){
            dp[i] = min(dp[i],dp[i-arr[j]]+1);
        }
        return dp[aim]>aim? -1:dp[aim];


    }
};