322. 零钱兑换

✅装满完全背包的最小物品总价值

这里类型如题,不过是把价值改成了个数

故在初始化dp数组时要注意初始化大一点。然后即是别忘了有dp[0] = 0,这个是求价值的基础

然后因为是完全背包,所以背包容量遍历顺序为正序

因为这里是求价值,跟物品是组合还是排列无关,所以这里既可以先遍历物品,在遍历背包容量,也可以先遍历背包容量,在遍历物品

class Solution {
public:
    //装满完全背包后得到的最少的价值(个数)
    int coinChange(vector<int>& coins, int amount) {
        vector<int>dp (amount + 1, 99999);
        //别忘了dp[0] = 0
        dp[0] = 0;
        for (int i = 0; i < coins.size(); i++) {
            for (int j = coins[i]; j < amount + 1; j++) {
                dp[j] = min(dp[j], dp[j - coins[i]] + 1);
            }
        }
        //如果dp[amount]没有被改变,则说明没有任何一种硬币组合能组成总金额
        return dp[amount] == 99999 ? -1 : dp[amount];
    }
};
posted @   北原春希  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示