Algorithm 背包问题的变种
我有n个数量(非负整数)。我的要求是确定一组最佳金额,以便组合的总和小于或等于给定的固定限额,并且总数尽可能大。最佳集合中可以包含的金额数量没有限制 例如:金额为143205454635641402,给定限额为5000 根据我的理解,背包问题对于每个物品有两个属性(重量和价值)。但上述问题只有一个属性(数量)。我希望这会使事情变得更简单Algorithm 背包问题的变种,algorithm,combinations,Algorithm,Combinations,我有n个数量(非负整数)。我的要求是确定一组最佳金额,以便组合的总和小于或等于给定的固定限额,并且总数尽可能大。最佳集合中可以包含的金额数量没有限制 例如:金额为143205454635641402,给定限额为5000 根据我的理解,背包问题对于每个物品有两个属性(重量和价值)。但上述问题只有一个属性(数量)。我希望这会使事情变得更简单 有人能帮我解决这个问题的算法或源代码吗?这仍然是一个NP难问题,但如果你想(或不得不)做类似的事情,也许这个主题能帮你一点忙: 我在那里修改了它。唯一的区别是
有人能帮我解决这个问题的算法或源代码吗?这仍然是一个NP难问题,但如果你想(或不得不)做类似的事情,也许这个主题能帮你一点忙: 我在那里修改了它。唯一的区别是:这是关于得到确切的数量,而不是“尽可能接近”,但这只是代码中的一些小变化(你必须将其翻译成你正在使用的语言) 查看我的代码中的注释,了解我正在尝试做什么,简而言之:
- 计算给定部分的所有可能组合,并将其相加
- 如果结果是我要查找的数量,请将解决方案保存到数组中
- 至少,对所有可能的解决方案进行排序,以获得使用最少部分的解决方案
- 如果低于您要查找的数量,请保存解决方案
- 按总量而不是使用的零件数量对解决方案进行排序
即使这个问题是背包问题的一个特例,它仍然是NP难的。它是有界的。因此,如果n是合理的,这可以很快解决。(即n的最大值是多少?)答案是143+546+1402+2054=4145@Pete 3564 + 1402 = 4966@Ricky鲍比——没错,但那家伙必须把尽可能多的东西放进背包里(反正我读到了)。嗯。嗯,也许不是。如果问题是尽可能多地把重量放在背包里,那么你当然是对的。@Pete true,我错过了问题的那一部分:D