当前位置: 首页 > 知识库问答 >
问题:

背包:一个约束,每个物品只能选择一次,物品数量较多

艾谦
2023-03-14

到目前为止,我的想法是生成一个超重的背包,然后递归地向后工作,一次替换一个项目,直到它<=最大重量。对于生成最优背包来说,这不是一个问题,然而,我真的想生成以下100个左右的背包。我想我可以通过继续我的递归过程来做到这一点,然而,我觉得这并不完全准确,因为a可能缺少稍微更优化的背包。

共有1个答案

麹高远
2023-03-14

这个问题可以表述为一个整数程序。

maximize sum_{i in items} v_i * x_i
subject to
sum_{i in items} x_i <= 10       [u]
sum_{i in items} w_i * x_i <= W  [z]
for all i in items, x_i in {0, 1}  [y_i]

有许多求解器库将为您解决这个程序;或者,您可以自己做分支和绑定。这是对偶线性规划,求解它可以得到整数规划的目标值的一个上界,这是分枝定界所需要的。

minimize 10 * u + W * z + sum_{i in items} y_i
subject to
for all i in items, u + w_i * z + y_i >= v_i  [x_i]
u >= 0
z >= 0
for all i in items, y_i >= 0

给定z的值,设置其他变量就是通过v_i-w_i*z将正的y_i赋给九个最大的项,同时将u赋给第十个最大的值。应该可以三进制搜索zO(n log n)

 类似资料:
  • 问题内容: 我有一个要添加“立即付款”按钮的产品列表,这样我就可以允许我的客户通过Paypal付款。 我已经阅读了文档,找不到如何执行此操作。我可以添加多个项目,但这不会很方便,因为我已经有要处理的项目列表。我还需要结帐流程来逐项列出订单,因此以1个价格“立即购买”也不是一件好事。 任何帮助表示赞赏的人,我都尝试过(没有运气): 问题答案: 请参阅此示例,并相应地进行更改。基本上将下划线添加到项目

  • 问题内容: 我有一个博客。在单个帖子页面上,我想显示指向上一个帖子的链接,如果有一个链接,则在底部发布下一个帖子。该链接应为特定帖子的标题。 我如何用猫鼬最简单的方式做到这一点? 我当前的控制器如下所示: 架构如下所示: 问题答案: 因此,假设您拥有这样的架构: 我想_id是mongo ObjectId,所以我们包含发布日期,我可以对其进行排序 让我们考虑一下,我已经打开了ID为的当前帖子(而不是

  • 我试图解决一个无界背包问题,但我卡住了。我已经解决了问题的主要部分,即获得最大值,但我还应该计算出为了获得最大值,我使用的每个项目的数量。 界限是小于100个项目和小于100个背包的容量。示例输入为 3(物品数量) 8(背包容量) 5 21(分别为重量和价值) 3 1 4 15 输出为 30(包可以容纳的最大值,是4个重量项目中的2个) 0 0 2(背包中每个项目有多少) 我不知道如何打印最后一行

  • 我是一个全新的领域,我现在有两个独立的下拉菜单。我正在尝试使用户能够在同一时间只能从两者中的一个进行选择。例如,如果用户从中选择某项内容,然后从中选择另一项内容,则变为未选中。 下面是我在html部分中的片段 这里是JS 这是一个简单的演示。你可以注意到你可以同时选择一辆汽车和一辆卡车。此时应仅为汽车或卡车:https://jsfidle.net/j82ryu5k/2/

  • 这次面试我感觉发挥得还行,但就是不知道为啥没过,拒的很快,可能HC少了吧,有比我更优秀的人也在面这个岗位(哽咽) 自我介绍 实习的一段经历中在团队里担任了什么角色? 你为团队做出了什么贡献? 业余兴趣爱好有哪些? 你为什么想当产品经理? Saas 产品定义 sql语句用得如何 跨部门沟通能力怎么样?#非技术面试记录#

  • 虽然标准背包问题可以通过动态规划来解决,但我试图稍微扭曲一下这个问题,以明确我的概念,但我发现它可能比我想象的更难。 最初的背包问题是,给定一个大小为的背包,以及一个重量为且值为的物品列表,找出总价值最高的背包中适合的物品子集。 据我所知,这可以通过动态规划实现,其中是项目数。 现在,如果我尝试添加约束,它们中的每一个都是一对只能相互独占地拾取的项目(即,如果存在项目a和项目B的约束,那么我只能选