算法-硬币找零问题

本文探讨了如何使用贪心算法解决找零问题,特别是在有25美分、10美分、5美分和1美分四种面额的硬币时。同时指出,对于面额为{1,6,8}的硬币,贪心算法无法得到最优解。文章提出了一个O(nk)时间复杂度的动态规划解决方案,并提供了C语言代码实现。在LeetCode的剑指 Offer II 103. 最少的硬币数目题目中,也有类似问题的解法代码展示。
摘要由CSDN通过智能技术生成

问题:

考虑用最少的硬币找 n 美分零钱的问题。假定每种硬币的面额都是整数。

a. 设计贪心算法求解找零问题,假定有25美分、10美分、5美分和1美分4中面额的硬币。

b. 设计一组硬币面额,使得贪心算法不能保证得到最优解。这组硬币面额中应该包含1美分,使得对每个零钱值都存在找零方案。

c. 设计一个 O(nk) 时间的找零算法,适用于任何 k 种不同面额的硬币,假定总是包含1美分硬币。

d. Leetcode 剑指 Offer II 103. 最少的硬币数目 为类似题目,代码也贴在下面

参考作答:

a. 每次选择不大于剩余未找零的面额最大的硬币进行找零,然后对剩余未找零进行更新,直到找零完成

b. 设只有面额为{1,6,8}三种硬币,需找零12美分

1)若按照贪心算法,得到的找零序列为{8,1,1,1,1},共4枚硬币

2)但实际最优解为{6,6},共2枚硬币

Q: 满足什么条件的硬币可以使用贪心算法? 我也没想出来,求大神解答

c. 使用动态规划的思想,优化方程为

dp[ i ]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值