【发布时间】:2014-09-10 19:01:44
【问题描述】:
正如我在here 中发现的,
硬币找零问题是使用给定的一组面额 d_1....d_m 找出特定数量的美分 n 找零的方法的数量。是整数分区的一般情况,可以通过动态规划求解。
这个问题通常被问为:如果我们想找 N 美分,并且我们有无限供应 S = { S_1, S_2,....., S_m } 价值硬币,有多少种方法可以我们做出改变? (为简单起见,顺序无关紧要。)
我试过了,效果很好。那么当不同硬币的顺序确实很重要时,我如何修改它以找到所有可能的硬币组合。
即: 之前
例如对于 N = 4,S = {1,2,3},有四种解:{1,1,1,1},{1,1,2},{2,2}, {1,3}。
现在:
对于 N = 4,S = {1,2,3},有 7 个解:{1,1,1,1},{1,1,2},{1,2,1},{ 2,1,1},{2,2},{1,3},{3,1}
这里是 {1,1,1,1},即使一个人可以以不同的顺序选择四个 '1',它也必须被视为一个最终组合。而不是考虑四个硬币是不同的。所以实际上不同硬币的顺序必须不同才能算作单独的组合。
例如:{1,1,3} 不会假定 {1_a,1_b,3_a} 是一个组合,而 {1_b,1_a,3_a} 是另一个具有不同顺序的组合。
【问题讨论】:
-
您可以使用初始解决方案生成唯一集,然后生成每个集的所有排列以生成所有唯一序列。
-
你真的想要所有的解决方案还是有多少?
-
@Henry 他们俩都可以。我想找到号码。 (如示例中为 7 )。如果我也可以打印它们,它不会造成伤害。
-
@mbeckish:是的。如果我知道每个解决方案的不同硬币值的数量和它们在解决方案中出现的时间,这很容易。但是使用链接中给定的算法,他们将只计算答案(不同解决方案的总和)。 (不是一一不同的解决方案)