换钱的最少货币数

题目链接

Solution

问n种货币凑成一个面额所需要的最少货币数。
动态规划。

表示凑成面额i的需要的最少货币数。
然后枚举每个面额的货币,更新dp数组即可。

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];
    }
};