目录
输出
首页 后端开发 C++ 使用分支限界法在C/C++中实现0/1背包问题

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

Sep 04, 2023 pm 08:17 PM
c/c 分支限界 /背包问题

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

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

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

完整的算法如下 -

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

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

  • 创建一个空队列 Q。

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

  • 当 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在C/C++中,strcmp()函数用于比较两个字符串 在C/C++中,strcmp()函数用于比较两个字符串 Sep 10, 2023 am 11:41 AM

函数 strcmp() 是内置库函数,在“string.h”头文件中声明。该函数用于比较字符串参数。它按字典顺序比较字符串,这意味着它逐个字符地比较字符串。它开始比较

在C/C++中,fseek()函数用于在文件中移动文件指针的位置 在C/C++中,fseek()函数用于在文件中移动文件指针的位置 Sep 02, 2023 pm 03:57 PM

fseek()在C语言中用于将文件指针移动到特定位置。偏移量和流是指针的目标,它们在函数参数中给出。如果成功,它返回零。如果不成功,它返回非零值。以下是C语言中fseek()的语法:intfseek(FILE*stream,longintoffset,intwhence)这里是在fseek()中使用的参数:stream−这是用于标识流的指针。offset−这是从位置开始的字节数。whence−这是偏移量添加的位置。whence由以下常量

如何在C/C++中检测整数溢出? 如何在C/C++中检测整数溢出? Aug 31, 2023 pm 01:53 PM

唯一安全的方法是在溢出发生之前进行检查。虽然有一些不正规的方法可以检查整数溢出。所以,如果你的目标是检测无符号整数相加的溢出,你可以检查结果是否实际上小于两个相加的值。例如,示例代码unsignedintx,y;unsignedintvalue=x+y;booloverflow=value<x;//Alternatively"value<y"shouldalsowork这是因为如果x和y都是无符号整数,如果相加后溢出,它们的值不能大于它们中的任何一个,因为它们需要

使用分支限界法在C/C++中实现0/1背包问题 使用分支限界法在C/C++中实现0/1背包问题 Sep 04, 2023 pm 08:17 PM

这个想法是为了实现贪婪方法为分数背包问题提供最佳解决方案这一事实。为了检查特定节点是否可以为我们提供更好的解决方案,我们计算最佳解决方案(通过节点)实施贪心方法。如果贪心法本身计算出的解比目前为止最好的解要多,那么我们就无法通过节点获得更好的解。完整的算法如下-根据每单位重量的价值比率的降序对所有项目进行排序,以便可以使用贪心法计算上限。初始化最大利润,例如maxProfit=0创建一个空队列Q。决策虚拟节点创建树并将其插入或排队到Q。虚拟节点的利润和权重为0。当Q不空或为空时执行以下操作。创建

一些关于C/C++三元运算符的有趣观察 一些关于C/C++三元运算符的有趣观察 Sep 15, 2023 pm 07:29 PM

我们知道三元运算符是代替if..else子句实现的。它由?:表示。'?'符号相当于if部分,':'相当于else部分。以下3个程序解释了三元运算符情况下的一些有趣的观察结果。以下程序能够编译,没有任何错误。三元表达式的返回类型预计为float(与exp2一样),并且exp3(即文字零-int类型)能够隐式转换为float。#include<iostream>usingnamespacestd;intmain(){  inttest1=0;&

贪心算法的C/C++程序,用于找到最少硬币数量 贪心算法的C/C++程序,用于找到最少硬币数量 Sep 19, 2023 pm 11:01 PM

贪心算法是一种用于寻找给定问题的最优解决方案的算法。贪婪算法的工作原理是找到每个部分的局部最优解(问题的一部分的最优解),因此表明可以找到全局最优解。在这个问题中,我们将使用贪婪算法算法来找到可以组成给定总和的最小硬币/纸币数量。为此,我们将考虑所有有效的硬币或纸币,即面额为{1,2,5,10,20,50,100,200,500,2000}。我们需要返回需要补足总和的硬币/纸币的数量。让我们举几个例子来更好地理解上下文-示例1-Input:1231Output:7说明-我们需要两张500卢比纸币

如何在C/C++中使用枚举? 如何在C/C++中使用枚举? Aug 28, 2023 pm 05:09 PM

枚举是C语言中的用户定义数据类型。它用于给整数常量赋予名称,使程序易于阅读和维护。关键字“enum”用于声明一个枚举。以下是C语言中枚举的语法:enumenum_name{const1,const2,.......};Theenumkeywordisalsousedtodefinethevariablesofenumtype.Therearetwowaystodefinethevariablesofenumtypeasfollows.enumweek{sunday,monday,tuesday,

在C/C++中,4维数组 在C/C++中,4维数组 Sep 01, 2023 pm 11:57 PM

一个4维数组是由3维数组组成的数组。算法Begin.Declarethevariables.Declarethearrayelements.Takethenoofelementsasinput.Taketheelementsasinput.Printtheelementsstoredinarray.End.这是一个4D数组的示例。#include<iostream>usingnamespacestd;intmain(){  inta[2][2][3

See all articles