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
vector<int> f(aim + 1, aim);
f[0] = 0;
if(arr.size() < 1)
return -1;
sort(arr.begin(), arr.end());
for(int i = 0; i < arr.size(); i++)
if(arr[i] <= aim)
f[arr[i]] = 1;
// for(int i = 1; i <= aim; i++) {
// for(int j = 0; j < arr.size(); j++) {
// int a = i - arr[j];
// if(a >= 0) {
// if(f[a] != 0)
// f[i] = min(f[a] + 1, f[i]);
// }else {
// if(f[i] == aim)
// f[i] = 0;
// }
// }
// }
for(auto coin : arr) {
for(int i = coin; i <= aim; i++)
f[i] = min(f[i], f[i-coin] + 1);
}
if(f[aim] == aim && aim != 0)
return -1;
return f[aim];
}
};