322力扣:零钱兑换

DP:

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        int n=coins.size();
        vector<int> dp(amount+1,-1);
        dp[0]=0;
        for(int i=1;i<=amount;i++){
            for(int j=0;j<n;j++){
                if(i-coins[j]>=0 && dp[i-coins[j]]>=0){
                    int res=dp[i-coins[j]]+1;
                    if(dp[i]==-1 || dp[i]>res)
                    dp[i]=res;
                }
            }
        }
        return dp[amount];
    }
};

记忆化与回溯:

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> count(amount+1,0);
        function<int(int)> dfs=[&](int amount){
            int Min=INT_MAX;
            if(amount==0) return 0;
            if(amount<0) return -1;
            if(count[amount]!=0) return count[amount];
            for(auto num:coins){
                if(dfs(amount-num)==-1) continue;
                if(dfs(amount-num)<Min)
                Min=dfs(amount-num)+1;
            }
            count[amount]=Min==INT_MAX?-1:Min;
            return count[amount];
        };
        return dfs(amount);;
    }
};
相关推荐
IronMurphy20 分钟前
【算法五十六】84. 柱状图中最大的矩形
算法
fie888929 分钟前
matlab打靶法求解两点边值优化问题
开发语言·算法·matlab
不做无法实现的梦~1 小时前
常见工程分析软件
stm32·嵌入式硬件·算法
hetao17338371 小时前
2026-05-28~06-02 hetao1733837 的刷题记录
c++·算法
ZhengEnCi1 小时前
O08-单写线程与单读线程冲突分析
算法
仍然.1 小时前
算法题目---优先级队列
算法
一个爱编程的人1 小时前
图的相关概念
c++·算法·图论
迈巴赫车主1 小时前
贪心算法
算法·贪心算法
星马梦缘1 小时前
死锁与进程资源分配问题的解法
算法·操作系统·深度优先·死锁
爱炼丹的James1 小时前
第四章 数学知识
算法