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