dp专题15 零钱兑换

这篇具有很好参考价值的文章主要介绍了dp专题15 零钱兑换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目:

思路:        

        这道题,是个比较模板的完全背包问题,这里要求的是问凑成总金额所需的最少的硬币的个数。

我们明确一下 dp[ i ] 的含义,是   dp[ i ] 存储的是凑成总金额所需的最少的硬币的个数。

其中 下标 i 的含义是  "背包容量" amount ,  并且不同金额中是有无限个的。

所以我们可以将,不同金额硬币作为"物品体积",每个硬币价值都为 1 表示物品的数量。

其次我们也要分析 dp 数组的初始化,由于 要求所需最少的硬币个数,所以我们将dp初始化全部为正无穷。 其中 dp[ 0 ] 要从初始化为 0  ,毕竟 凑成总金额为 0 所需的硬币个数就是 0.

随后确定 dp 公式:    dp[ j ] = min(dp[ j ] , dp[ j - i ] + 1 );

最后我们选取的过程中,选取顺序无关,所以是个组合数,确定遍历顺序。

先物品,后背包。文章来源地址https://www.toymoban.com/news/detail-805598.html

代码详解如下:

class Solution {
public:
    const int INF = 0x3f3f3f3f3f3f3f;   // 定义正无穷
    inline int coinChange(vector<int>& coins, int &amount) 
{
	vector<int>dp(amount + 2,INF);  // 开辟 dp 数组,并初始化为 INF
	dp[0] = 0;  // 特定初始化
	
    // 组合数的遍历物品以及背包
	for(int &i:coins)   
	{
		for(int j = i;j <= amount;++j)  // 完全背包正向遍历
		{
			dp[j] = min(dp[j],dp[j - i] + 1);   // dp 公式
		}
	}
	if(dp[amount] >= INF) return -1;    // 返回结果
	else return dp[amount];
}
};

 最后提交:

到了这里,关于dp专题15 零钱兑换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法竞赛备赛进阶之数位DP训练

    数位DP的思想就是对每一位进行DP,计算时记忆化每一位可以有的状态,其作用是减少运算时间,避免重复计算。 数位DP是一种计数用的DP,一般就是要统计一个区间[A,B]内满足一些条件数的个数。 以1e9甚至1e18、1e100的问题为例,因为在统计情况下有很多重复的计算,数位DP实

    2024年01月16日
    浏览(48)
  • 【算法训练(day1)】李白打酒加强版(dp问题)

    目录 一.题目描述 输入格式 输出格式 输入输出样例 说明/提示 二.解题思路 定义状态 推导状态方程 细节处理  三.实现代码 四.小结一下 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 22 斗。他边走边唱: 无事街上走,提壶去

    2024年02月02日
    浏览(37)
  • 算法竞赛备赛之动态规划训练提升,DP基础掌握

    01背包问题是在M件物品中选择若干件放在空间为W的背包中,每件物品的体积为W1,W2至Wn,价值为P1,P2至Pn,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。 01背包问题常常采用动态规划的方法去求解,状态转移方程为:F(W,i)=max{F(W,

    2024年02月08日
    浏览(41)
  • AcWing算法学习笔记:动态规划(背包 + 线性dp + 区间dp + 计数dp + 状态压缩dp + 树形dp + 记忆化搜索)

    算法 复杂度 时间复杂度0(nm) 空间复杂度0(nv) 代码 算法 通过滚动数组对01背包朴素版进行空间上的优化 f[i] 与 f[i - 1]轮流交替 若体积从小到大进行遍历,当更新f[i, j]时,f[i - 1, j - vi] 已经在更新f[i, j - vi]时被更新了 因此体积需要从大到小进行遍历,当更新f[i, j]时,f[i - 1,

    2024年02月21日
    浏览(42)
  • 算法基础复盘笔记Day11【动态规划】—— 区间DP、计数类DP、树形DP、记忆化搜索

    ❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于 Java后端开发 ,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得 关注 、 点赞 、 收藏 、 评论 ⭐️⭐️⭐️ 📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉 1. 题目

    2024年02月01日
    浏览(41)
  • 动态规划(DP)(算法笔记)

    本文内容基于《算法笔记》和官方配套练题网站“晴问算法”,是我作为小白的学习记录,如有错误还请体谅,可以留下您的宝贵意见,不胜感激。 动态规划(Dynamic Programming,DP)是一种用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子

    2024年02月05日
    浏览(44)
  • 【算法深度探索】动态规划之旅(1):挑战OJ题海,解锁15道经典难题,让你成为DP大师!

    📃 博客主页: 小镇敲码人 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 什么?你问我答案,少年你看,下一

    2024年04月11日
    浏览(36)
  • 换零钱II:零钱面值动态变化,class方法自动兑换最少零钱(贪心算法)

    银行现存零钱面值种类动态变化但数量无限,类方法change()完成指定金额的最少零钱个数兑换。   (本笔记适合学透python基本数据结构,熟悉class的基构造,对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网 :https://www.python.org/ Free :大咖免费“

    2024年02月16日
    浏览(35)
  • 动态规划算法刷题笔记【状压dp】

    a1 == 1 判断是否为奇数,如果为1,则为奇数 因为奇数二进制末位一定是1,所以 与1 得到的结果是1 这里,114——2 14 ——第15位是1,可以表示14个1 i(1j)—— 从0开始是因为,原本第1位就是1。所以j=0时,对应的就是 i 的最低位 F l o y d Floyd Fl oy d 算法: n o w ∣ f l a g = = f l

    2024年02月11日
    浏览(41)
  • 算法基础复盘笔记Day10【动态规划】—— 线性DP

    ❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于 Java后端开发 ,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得 关注 、 点赞 、 收藏 、 评论 ⭐️⭐️⭐️ 📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉 1. 题目

    2023年04月21日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包