算法——动态规划之0-1背包问题

打算每天复习一点算法内容,就先从动态规划下手。曾经动态规划让我头疼,重新学了一下觉得还好啦不是很难,实现动态规划算法的核心在于实现它的递推公式,写出递推公式,代码也就很容易了。

 

动态规划类似分治法,都是将一个大问题分解为一个个小问题,分而治之。不同之处在于,动态规划记忆了重复的子问题,避免了运算过程中的重复计算。

适用情况:有重叠子问题和最优子结构性质(动态规划每一步求的都是最优解)的问题。

下面我们通过经典的动态规划问题(0-1背包问题)来学习这个算法。

问题描述:将N件物品选几件放入容量为W(重量)的背包中,每件物品有自己的重量w和价值v,要求在不超过背包容量情况下使背包内放入的物品总价值最高。

分析:①不超过背包容量,有:Σw[i]<=W (i表示第i件物品)

          ②对于“将前i件物品放入容量为j的背包中”这个子问题,现只考虑第i件物品放还是不放,如果放了的话,问题转换为“前i-1件物品放入剩下j-w[i]容量的背包中”,如果不放,问题转换为“前i-1件物品放入容量为j的背包中”。这两种情况的优者为当前问题的最优解。

          ③根据②的分析,得到如下递推公式

            

                其中,0<=i<=N,0<=j<=W.

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值