class Solution {
public:
/**
* 最少货币数
* @param arr int整型vector the array
* @param aim int整型 the target
* @return int整型
*/
/*
dp(i),表示 i被arr表示出来最起码要几个硬币
dp(i) = min(dp(i-arr[j]) + 1)
*/
int minMoney(vector<int>& arr, int aim) {
int len = arr.size();
if (len == 0) { // 对arr进行输入判断
return -1;
}
if (aim == 0) { // 对aim进行输入判断
return 0;
}
vector<int>dp(aim + 1, INT_MAX);
dp[0] = 0; //0 没有意义,初始化为0
for (int i = 0; i <= aim; i++) {
for (int j = 0; j < len; j++) {
if (i >= arr[j]) {
dp[i] = min(dp[i-arr[j]] + 1, dp[i]);
}
}
}
return dp[aim] == INT_MAX ? - 1 : dp[aim];
// write code here
}
};