决定是否可以休息的算法

时间:2016-04-14 18:27:04

标签: python algorithm math

输入: 硬币(价值:金额对),金额变化

输出:正确还是错误

例如:

Input = {50:4, 100:1, 200:2}, 300  (I have 4 pieces of '50', 1 pieces of '100' etc), must give 300 back
Output = True

这个例子很愚蠢。硬币可以有不同的值,如奇数值。

硬币不能有小数值。

任何线索?

伪代码没问题

Python也可以(首选,但不是那么重要)

编辑:

我要求领导,而不是完整的代码。我正在考虑一种“强力”方法:生成所有可能的组合,并根据我拥有的硬币数量来检查它们。但这对我来说似乎并不聪明......

你有没有更好的想法如何进行?

另一个例子可能是:

Input = {3:2, 7:1, 10:1}, 15
Output = False

1 个答案:

答案 0 :(得分:1)

你要求的是SAT算法并且它具有指数复杂性,因此除非你有一些额外的限制,否则你必须进行详尽的检查(如你所说的那样蛮力)。

您可能对函数itertools.combinations(iterable, combinations_length)感兴趣,以总结所有可能的组合。您也可以代表这样的元素:{3:2, 7:1, 10:1} => [3, 3, 7, 10]

您可以查看这篇文章https://en.wikipedia.org/wiki/Change-making_problem 其他选择