01背包回溯法复杂度_01背包问题(回溯算法实现)

这篇博客介绍了如何使用回溯法解决01背包问题。作者首先解释了01背包问题的基本概念,然后通过C语言代码展示了回溯法的实现过程,包括物品单位价值排序、回溯函数和上界函数的计算。最后,博主提供了代码运行的结果截图。
摘要由CSDN通过智能技术生成

所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。

天下午的算法复习课,老师提的各种算法经典问题时,出现频率就是01背包问题了!动态规划、回溯法、分支限界法,在贪心算法时也提到注意背包问题,当然

01背包问题不能用贪心算法实现,不能保证能得到最优解。回溯法是最近学的,所以试着用C语言将其实现了下,下面作以分析,后期将会继续用其他两种算法实

现01背包问题,并做比较。

回溯法:01背包属于找最优解问题,用回溯法需要构造解的子集树。在搜索状态空间树时,只要左子节点是可一个可行结点,搜索就进入其左子树。对于右子树时,先计算上界函数,以判断是否将其减去,剪枝啦啦!

上界函数bound():当前价值cw+剩余容量可容纳的最大价值<=当前最优价值bestp。

为了更好地计算和运用上界函数剪枝,选择先将物品按照其单位重量价值从大到小排序,此后就按照顺序考虑各个物品。

下面直接贴代码吧:

#include

#include

int n;//物品数量

double c;//背包容量

double v[100];//各个物品的价值

double w[100];//各个物品的重量

double cw = 0.0;//当前背包重量

double cp = 0.0;//当前背包中物品价值

double bestp = 0.0;//当前最优价值

double perp[100];//单位物品价值排序后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值