【发布时间】:2012-05-11 14:22:52
【问题描述】:
我有一组 N 数字,每个数字都附加一些成本,问题是选择所有可能的数字集作为列表,使其乘积小于某个数字 M,按照排序成本的总和。
例如:- 数字集是
(number, costOfThatNumber) : {(90, 10) , (80, 20), (60, 40), (40, 60), (15, 85)},
并且产品必须小于,Prod <= 1000,
可能的解决方案是:-
[Solution 1 :- {(15, 85), (40, 60)} :- Product = 600 (which is less than, 1000), cost = 85 + 60 = 145]
[Solution 2 :- {(15, 85), (80, 20)} :- Product = 900 and cost = 105]
所以列表变成了{Solution2, Solution1}。
PS :-
- 这不是作业问题,在采访中被问到。我只被问到算法,我只能说它看起来有点像背包问题,但用于乘法。
- 如果我无法正确解释问题,请原谅。
【问题讨论】:
-
如果不是最佳解决方案,即使有人给我一个蛮力算法,我也会很感激,我什至可以找到一种方法来选择所有可能的集合子集。
-
你的例子错了吗? 15*80不是900……不应该是(15, 85),(60,40)吗?
标签: algorithm knapsack-problem