我正在尝试解决一个经典的动态编程硬币找零问题。这是一个家庭作业问题,我不是在寻找完整的解决方案,只是为了看看我做错了什么。
输入:
x
我们想用硬币支付一定价值的金额。- 一组
d
表示可用硬币面额的数量(1c、5c、10c、25c、100c、200c)
输出:
- 需要换手付款的最小硬币数量。
假设:
- 收银机操作员拥有无限的硬币供应,并且知道如何提供最佳零钱。
到目前为止我试图做的事情:
我正在尝试构建一个数组 C,使得每个元素 C[i] 是交换金额 i 的硬币的/最小/数量。
C[0] = 0
对于 C[i],对于所有可用的硬币面额,我通过取所有 C[i-di] 加 1 的最小值来计算它。然后我从可用硬币中取出我挑选的硬币。
这种方法似乎适用于简单的情况,但是当我有时,例如:
99 99 0 0 0 1 0
我的方法失败了,因为以 1 美元换取 2 个硬币比支付 99 美分(交换 99 个硬币)更“便宜”。
任何指针将不胜感激。