【发布时间】:2016-06-27 18:56:18
【问题描述】:
如何有效地发行货币。例如,如果您有 1 张 100 美元的钞票、1 张 50 美元的钞票和 2 张 30 美元的钞票。如何确定我们需要 50 美元和 30 美元中的两个来实现 110 美元的汇总。
换句话说,我们有固定数量的钞票类型:30 美元(两张钞票)、50 美元(一张钞票)、100 美元(一张钞票)。问题是要确定我们应该拿哪些钞票来获得特定的金额,例如 110 美元?在这种情况下,我们应该取两张 30 美元的钞票和一张 50 美元的钞票。
这里不能使用贪心算法,因为如果我们先拿 100 美元的钞票,那么我们就无法实现 110 美元的汇总。
我们需要使用哪种数据结构来存储钞票?只是每种钞票类型的数量,也可以是存储每张钞票的数组:[100, 50, 30, 30]
找到我们需要哪些钞票来获得特定金额的算法是什么?
【问题讨论】:
-
有很多相关的问题,虽然这些问题通常使用硬币。我现在找不到完全相同的副本。你试过searching吗?
-
广义,这是子集和问题(en.wikipedia.org/wiki/Subset_sum_problem)。标准解决方案是 O(2^(n/2))。还有一个可能的伪多项式解。
标签: algorithm