牛客题霸--换钱的最少货币数
换钱的最少货币数
题目链接
Solution
问n种货币凑成一个面额所需要的最少货币数。
动态规划。
$dp_i$表示凑成面额i的需要的最少货币数。
然后枚举每个面额的货币,更新dp数组即可。
$dp[i] = min(dp[i], dp[i - a[j]])$
Code
class Solution {
public:
int minMoney(vector<int>& arr, int aim) {
int dp[aim + 5];
dp[0] = 0;
for (int i = 1; i <= aim; ++i) dp[i] = 1e9;
for (int i = 0; i < (int)arr.size(); ++i) {
for (int j = arr[i]; j <= aim; ++j) dp[j] = min(dp[j], dp[j - arr[i]] + 1);
}
if (dp[aim] == 1e9) return -1;
return dp[aim];
}
};