基于动态规划的背包问题,可是面试高频啊,可以抽象或改编成很多问题,要是没接触过一下就会被它拦住。
其实背包问题总共类型是三种,分别是0-1背包问题,完全背包问题、多重背包,其中0-1背包分两类,有价值与无价值,下面就以上四种,细细的分享一下个人的理解,也希望能帮看文章的各位理清思路。
可以详细理解一下0-1背包及完全背包,掌握住这两种,背包基本就问题不大了。
不解之处欢迎留言交流。
0-1背包问题-无价值
在n个物品中挑选若干物品,背包的大小为m,每个物品的大小为A[i],每件物品只能选一次,最多能装多少?
例子1:
输入: A = [3,4,8,5], m=10
输出:9
例子2: 输入:A = [2,3,5,7], m=12 输出:12
解析
初始状态DpMap = [0]*m+1, 表示背包容量为index时能装下的最大重量
转移矩阵:dp[j] = max(dp[j-A[i]]+A[i], dp[j])
dp[j-A[i]]表示容量