SSL1045 01背包题解

博客详细介绍了如何使用动态规划解决01背包问题,包括状态转移方程、数组优化和滚动数组的实现,强调了动态规划在处理大规模数据时的优势,并提供了进阶练习题目。
摘要由CSDN通过智能技术生成

SSL1045 01背包题解

题目描述:

一共有 N N N件物品
每件物品有两个属性:
重量 : w i w_i wi
价值 : p i p_i pi
现在有一个背包容量为 W W W. 问这个背包最多可以装价值为多少的物品?

输入:

4 10 //第一个数表示物件个数n,第二个数表示背包重量
5 8  //第一个表示物体得量,第二个表示价值,以此类推
3 6
4 7
2 5

输出:

19  //最大价值

分析:

显然这个题可用深度优先方法对每件物品进行枚举(选或不选用0,1控制). 程序简单,但是当 N N N的值很大的时候不能满足时间要求,时间复杂度为 O ( 2 n ) O(2^n) O(2n)
所以我们考虑用动态规划来做
首先定义一个二维数组 f i , j f_{i,j} fi,j
f i , j f_{i,j} fi,j表示前i个物品放入体积为 V V V的背包背包取得的最大价值
在考虑我们有两种操作,要么要,要么不要。
如果不要就很简单了,只要继承前面的就行了
如果要的话,我们则需要将背包容量腾出一点来,再加上价值
那么状态转移方程就很容易列出来了, f i , j f_{i,j} fi,j= m a x max max( f i − 1 ,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值