【发布时间】:2018-03-09 05:29:53
【问题描述】:
我有硬币兑换问题,除了 twist:不是从无限硬币中找到等于单个总和的解决方案,而是从一组有限硬币中找到小于的解决方案列表总和的集合。
(经典问题的一个很好的链接是here)
(这也类似于子集和问题,除了有一组目标而不是一个 - 链接here)
一个类似但不同且看似更难编码的问题:
给定-
- 可能的数值列表必须全部使用 [1, 9, 4, 1, 3, 2]
- 可以达到的最大总数的组列表 [(GroupA,17), (GroupB,1), (GroupC,5)]
目标 - 将列表中的每个数值分配给一个组,以便所有项目都在以下约束条件下使用:每个组的值的总和不得超过分配的最大值。
例如,此示例可能会找到 3 个解决方案:
[[GroupA,[9,4,1,3]], [GroupB, [1]], [GroupC, [2]],
[GroupA,[9,4,1,2]], [GroupB, [1]], [GroupC, [3]],
[GroupA,[9,2,1,3]], [GroupB, [1]], [GroupC, [4]]]
【问题讨论】:
-
这看起来像广义的子集和(即子集和可以简化为它)。
标签: python-3.x algorithm recursion combinations subset-sum