[python] 动态规划求解背包问题

这篇博客介绍了如何使用动态规划算法解决01背包问题。动态规划将问题分解为子问题,找到最优解。文章详细阐述了动态规划的具体步骤、关键代码思想,并给出实例解析及代码实现。
摘要由CSDN通过智能技术生成

                                      动态规划求解01背包

 

01背包问题描述:

01背包问题可以假设为现在有一堆物品,每一个物品都具有两个属性,物品的重量和价值。现在有一个承重有限的背包,给定背包的最大承受重量。现在要将物品装入背包,使得背包里所有物品的价值总和最大,我们应该放哪些物品进入背包。

 

 动态规划

动态规划算法通常所用于求解具有某种最有性质的问题。在某一个具体的问题中,可能会存在很多可行解,而我们所需要的就是去寻找这众多可行解中的最优解。动态规划的思想也和分治算法的思想类似,动态规划算法也是将原问题分解为若干个子问题,然后根据子问题的解来得到原问题的最优解。动态规划算法和分治法不同的是,分治法分解得到的若干个子问题是互相独立的,相互没有约束。而动态规划算法得到的子问题的解之间相互约束,从规模最小的子问题到原问题中的每一级,较高级的子问题的解是由较低级的子问题的最优解得到的,这样保证了每一级所得到的解都是当前子问题的最优解。最终得到的原问题的解也便是最优的。但动态规划算法只能得到最优解中的某一个,而不能得到所有的最优解。

 

具体步骤:

(1) 把原问题分解成各个子问题,如背包的重量为i(0<=i<=背包最大承重)时,面对前j(1<=j<=n)件物品时,背包所能获取的最大价值。

(2) 依次求出每个子问题的最优解,并且每一个问题的最优解都是由前一个问题的最优解得到,找到其状态转移方程。

(3) 最终通过各个子问题的最优解得到原

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值