c++ - 一些修改的改变问题

标签 c++ algorithm data-structures greedy coin-change

<分区>

在以下贪婪算法的找零问题中,解决了以下问题:如何用最少数量的硬币赚取给定数量的钱?

算法:如果可能,使用最有值(value)的硬币。假设我们有无限数量的每个硬币集。

我的教授,写了 (4) 不是产生最优解,谁能说为什么? (或者为什么其他不是反例?)

1- {1,2,5}

2- {1,4,7}

3-{1,5,10}

4-{1,7,10}

最佳答案

在需要代表 14 的情况下,对第 4 组中的硬币应用贪心策略不会产生最佳结果:

  • 贪心策略会尽快取 10,最后取 4 便士,总共取 5 个硬币
  • 最佳策略是取两个 7,总共两个硬币。

很容易看出,如果存在一个硬币C这样值 k*C至少可以由 k+1 组成coins 如果你拿走任何面额更高的硬币,那么贪心算法就不会成功。

在你的最后一组中 C=7 , k=2 , kC=14 .如果你拿10制作14 ,你需要五个硬币,大于k .

关于c++ - 一些修改的改变问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785740/

相关文章:

c# - 我可以使用什么算法根据可变整数输入找到任何有效结果

c++ - 复合数据结构和摆弄指针

c++ - 可变参数模板 : Pass parameter pack without expansion

c++ - 字段类型不完整

c++ - QMediaPlayer 在 QtCreator 外部启动时无法在 Windows 上开始播放

algorithm - 根据与输入字符串匹配的单词对字符串数组进行排序

java - 如何在 Java 中找到排序的排列

c++ - std::launch::async 不同线程的数量是否正确?

javascript - 如何安排 javascript 对象以获得更好的性能

c++ - 存储各种尺寸也各不相同的结构的好方法?