背包问题的dp思路
背包模型
0-1背包
完全背包
多重背包
分组背包
背包问题的dp思路通常从两个角度来考虑DP问题:
状态表示:
首先考虑问题需要用几维的状态来表示,每个状态f(i,j)表示的是一个集合,f(i,j)存的是集合中所有选法的总价值的最大值。
f(i,j)表示:「1.只从前i个物品中选」,「2.总体积=j的选法集合」。存的数量是每个选法的总价值的最大值。
状态计算:
状态计算求算的是,如何一步步的把每个状态算出。f(N,V)是所有选法总价值的最大值,表示从所有N个商品中选,并且总体积不超过V的选法的集合。
集合划分考虑把当前集合划分为若干个小的子集,使得每个子集可以用前面更小的状态表示出来。
注:f(i,j)存的是集合中所有选法的最大值,存的是一个数。
背包模型背包模型可以描述为:有N个物品和一个容量为V的背包,每一个物品有两个属性:一个是体积
,一个是价值
。从中挑一些物品,使得总体积=V,求挑出物品最大价值。根据限制的不同,背包问题可以分为四种情况:
0-1背包:每个物品最多用一次;完全背包:每个物品有无限个;多重背包:每个物品最多有个,不同物品的
值可能不同;分组背包问题:每组最多选一个物品;0-1背包题目
题目链接: