当前位置: 首页 > 编程笔记 >

0/1背包在C ++中使用Branch and Bound

郗浩言
2023-03-14
本文向大家介绍0/1背包在C ++中使用Branch and Bound,包括了0/1背包在C ++中使用Branch and Bound的使用技巧和注意事项,需要的朋友参考一下

想法是实现以下事实:贪婪方法为分数阶背包问题提供了最佳解决方案。

为了检查特定节点是否可以为我们提供更好的解决方案,我们计算(通过节点)实施贪婪方法的最佳解决方案。如果用Greedy方法计算出的解本身不是迄今为止最好的解,那么我们将无法通过该节点获得更好的解。

完整的算法如下-

  • 根据每单位重量的值比率的降序对所有项目进行排序,以便可以使用贪婪方法计算上限。

  • 初始化最大利润,例如maxProfit = 0

  • 创建一个空队列Q。

  • 创建决策树的虚拟节点并将其插入或排队到Q。虚拟节点的利润和权重为0。

  • 当Q不为空或为空时,请执行以下操作。

    • Q中的项目已创建。让提取的项目为u。

    • 计算下一级节点的利润。如果利润高于maxProfit,则修改maxProfit。

    • 计算下一级节点的边界。如果bound大于maxProfit,则将下一级节点添加到Q。

    • 请看以下情况:未将下一级节点视为解决方案的一部分或将其视为解决方案的一部分,并添加一个节点作为下一级来排队,但权重和收益却没有处理或考虑下一级节点。

插图如下-

输入值

// First thing in every pair is treated as weight of item
//第二件事被视为项目的值
Item arr1[] = {{2, 40}, {3.14, 50}, {1.98, 100},
{5, 95}, {3, 30}};
Knapsack Capacity W1 = 10

输出结果

The maximum possible profit = 235
 类似资料:
  • 本文向大家介绍C中的0-1背包问题?,包括了C中的0-1背包问题?的使用技巧和注意事项,需要的朋友参考一下 背包是袋子。背包问题是根据物品的值将物品放入袋中的。目的是使袋子内的值最大化。在0-1背包中,您既可以放置物品也可以将其丢弃,没有将物品的某些部分放入背包的概念。 样本问题 重量分布 最大值为65,因此我们将项目2和3放入背包。 0-1背包问题计划 输出结果

  • 我对这个问题有点困惑。作为算法帮助我找到最大的利润从袋。但是这个算法并没有告诉我我应该拿哪一个项目会让我的利润最大。例如 n=4项,背包的容量M=8,利润=[15,10,9,5],重量分别为w=[1,5,3,4],当我解决这个问题时,我得到最大的利润为29 这里是解决方案[http://www.mafy.lut.fi/study/DiscreteOpt/DYNKNAP.pdf] 但是我想知道我应该

  • 本文向大家介绍解决0-1背包问题的C ++程序,包括了解决0-1背包问题的C ++程序的使用技巧和注意事项,需要的朋友参考一下 在0-1背包问题中,给出了一组项目,每个项目都有一个权重和一个值。我们需要确定要包含在集合中的每个项目的数量,以使总重量小于或等于给定的限制,并且总值尽可能大。 输入项 输出结果 算法 范例程式码 输出结果

  • 我写了一个背包类,我用它来解决背包算法。这个类正在使用动态规划算法来解决这个问题。 我在代码中实现了一些优化,因此我使用线性O(W)空间来找到最大值,但当我试图找到见证时,我仍然需要O(nW)空间来保持布尔表。 有人能告诉我,是否有可能找到背包容量最大、空间较小、复杂度与O(nW)相同的证据,这里W是背包容量。 如果您认为代码中可能还有更多优化,请也告诉他们。

  • 在我为0/1背包和无界背包签出的所有DP解决方案中,解决方案方法总是这样定义的: 0/1背包:取第n项或不取第n项,使总价值最大化。例如,0/1背包 无界背包:将第n个物品视为最后挑选的物品,或(n-1)个物品视为最后挑选的物品,使总价值最大化。例如,无界背包 但无界背包也可以使用0/1背包的逻辑来解决,只需稍加调整。我的意思是,对于0/1背包,我们执行以下操作(使用第一个链接中的代码): 请注意

  • 本文向大家介绍C#使用动态规划解决0-1背包问题实例分析,包括了C#使用动态规划解决0-1背包问题实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用动态规划解决0-1背包问题的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。