输入: 硬币(价值:金额对),金额变化
输出:正确还是错误
例如:
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
答案 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 其他选择