首页 > 后端开发 > C++ > 正文

使用分支限界法在C/C++中实现0/1背包问题

PHPz
发布: 2023-09-04 20:17:06
转载
1538人浏览过

使用分支限界法在c/c++中实现0/1背包问题

这个想法是为了实现贪婪方法为分数背包问题提供最佳解决方案这一事实。

为了检查特定节点是否可以为我们提供更好的解决方案,我们计算最佳解决方案(通过节点)实施贪心方法。如果贪心法本身计算出的解比目前为止最好的解要多,那么我们就无法通过节点获得更好的解。

完整的算法如下 -

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

    立即学习C++免费学习笔记(深入)”;

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

  • 创建一个空队列 Q。

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

    C知道
    C知道

    CSDN推出的一款AI技术问答工具

    C知道 45
    查看详情 C知道
  • 当 Q 不空或为空时执行以下操作。

    • 创建了 Q 中的项目。设提取项为u。

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

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

    • 考虑下一级节点不被视为或考虑为解决方案的一部分的情况,并将节点添加到队列的级别为下一级,但权重和利润不处理或考虑下一级节点。

下面给出的插图 -

输入
// First thing in every pair is treated as weight of item
// and second thing is treated as value 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/C++中实现0/1背包问题的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:tutorialspoint网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号