【发布时间】:2019-07-10 18:33:19
【问题描述】:
有一个对象Product,其属性为price,也有一个budget。
从产品列表和给定预算中,如何获得价格总和等于或小于预算的最长产品子集。每个子集只允许 1 个产品。价格和预算总是积极的
例如
[
{id: 1, name: pr1, price: 1},
{id: 2, name: pr2, price: 1},
{id: 3, name: pr3, price: 1.5},
{id: 4, name: pr4, price: 3},
{id: 5, name: pr5, price: 2},
{id: 6, name: pr6, price: 4},
]
预算 = 6
结果
[
{id: 1, name: pr1, price: 1},
{id: 2, name: pr2, price: 1},
{id: 3, name: pr3, price: 1.5},
{id: 5, name: pr5, price: 2},
]
是否可以不用递归来解决这个问题
【问题讨论】:
-
这似乎可以通过一个简单的 while 循环来解决。按价格对您的产品进行排序,并从价格最低的产品开始将它们添加到列表中,并保持总价格。如果下一个产品会使总数超出预算,则退出循环。该列表现在将包含价格总和为
-
这是背包问题的变体。