这似乎类似于分区,除了1:50不使用所有整数。 似乎也类似于跳跃的汽车包装问题,但有点不同:
其实考虑之后,是an ILP,NP-hard。
我推荐一些动态编程appyroach。 基本上,定义值“余数”,并将其设定为目标(例如50 )。 然后,在每一步中执行以下操作:
找到适合剩下最大硬币的东西
请想想如果你(a )含有硬币,或者(b )不含有该硬币会发生什么。
按场景递归
所以如果剩下的是50,最大的硬币是25和10,你可以分为两种情况:
1. Remainder=25,Coinset=1x25
2. Remainder=50,Coinset=0x25
下一步(每个分支)可能如下:
1-1. Remainder=0,Coinset=2x25 Logged
1-2. Remainder=25,Coinset=1x25
2-1. Remainder=40,coinset=0x 25,1 X10
2-2.remainder=50,0x 10
每个分支分为两个分支,但以下情况除外:
剩下的是0 (在这种情况下你记录它)。剩下的是比最小的硬币)。在这种情况下你把它扔掉)。剩下的硬币不会再多了)。在这种情况下,你把它扔掉。 因为有多余的!=0)