01背包问题–动态规划初步

背包问题一直以来都是动态规划的入门级的经典问题,很多动态规划题目都由其衍生而来,我们看看这个最简单的01背包问题吧!
题目:

给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个

看一下背包表
01背包问题–动态规划初步_第1张图片

有a b c d e物品,有着各自的重量和价值
有容量分别为1 2 3 4 5 6 7 8 9 10的背包

思路:

当取容量为2的背包时,我们可取物品a和b,但是a的价值更大,通过比较函数可得到a物品
当取容量为6的背包时,我们可取物品a和e 或者物品c 或者物品b和e,通过比较发现物品a和e价值最大

说到这里读者可能有点懵懵懂懂或者有些想法了,下面看看代码怎么实现
01背包问题–动态规划初步_第2张图片
数组W[]和V[]分别表示物品的重量和价值,n表示物品的件数,m表示背包的容量
建立数组f[][]来临时存储背包里面含有的最大价值数并且返回
bug用来初始化数组f
通过两侧for循环对物品的重量和价值进行循环
这段用来判断并且初始化f数组
在这里插入图片描述
如果物品的重量大于背包容量的话,则取前一物品数
在这里插入图片描述
最后就是状态转移方程了,就可以实现这个基本的01背包问题啦
完整代码

你可能感兴趣的:(技术)