找零钱问题 —— 蛮力&动态规划&贪心&分治

本文探讨了找零钱问题,介绍了四种不同的算法:蛮力法、动态规划、贪心算法和分治算法。针对这个问题,贪心算法并不总是能找到最优解,而动态规划则能确保找到最少硬币数的解决方案。文章通过实例分析了各种算法的时间复杂度和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题背景:

找零钱一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为25美分、10美分、5美分、及1美分的硬币。售货员分步骤组成要找的零钱数,每次加入一个硬币。选择硬币时所采用的贪婪准则如下︰每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目。

2. 算法介绍:

(1)蛮力法:

以此题目为例,我们需要遍历四种币值的硬币来判断最优解是何种组合,因此时间复杂度为O(n4).

#include<iostream> 
using namespace std;
leetcode找零钱问题动态规划 leetcode12. 整数转罗马数字 思路: 特别注意:本文介绍的是&ldquo;贪心算法&rdquo;,但这种贪心选择性质的成立是有一定条件的。跟这里的&ldquo;候选&rdquo;数值有关,如果&ldquo;候选&rdquo;数值是另一些数字,&ldquo;贪心算法&rdquo;很可能就失效了,此时可能就要应用&ldquo;动态规划&rdquo;来解决。这一点在本文并不展开,本人也要进行相应的学习以后,才能解释清楚这个问题。也希望能解释清楚这件事情的朋友能够把您的理解分享给大家。 在生活中的例子: 在以前还使用现金购物的年代,如果我们不想让对方找钱,付款的时候我们会尽量拿面值大的纸币给对方,这样才会使得我们给对方的纸币张数最少,对方点钱的时候(因为对方要检验你给的钱对不对)也最方便。最极端的一种情况,你要是都拿零钱去买一个比较贵重的东西,我相信没有人是很高兴收到你的钱的,因为他们点钱费劲。 &ldquo;整数转罗马数字&rdquo;与上面的问题是一模一样的思想:在表示一个较大整数的时候,&ldquo;罗马数字&rdquo;不会让你都用 11 加起来,肯定是写出来的&ldquo;罗马数字&rdquo;的个数越少越好。 于这道问题&ldquo;纸币&rdquo;有哪些,并不是只有题目中给出的对应关系,根据规则,还可以得到一些&ldquo;纸币&rdquo;的面值,不过都是有限个&ldquo;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使Di María

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值