给定一组物品,每种物品都有自己的重量(体积)和价值,现有一个背包,在受限制的重量(或者容积)下,取若干物品,使得总价值最大。这一类问题,被称为背包问题。
对于每个物品是否要装入背包,我们自然可以进行暴力枚举或搜索,但是如果要暴力地去做,那么时间复杂度会非常的高,这时候需要一种更加优化的算法——动态规划。
- 确定状态:共有
个物品,背包总承重为
,根据物品和容量确定状态,对于前
个物品放在背包里且总重量不超过
,有最大价值
。
决策:是否将第i个物品装入背包。为了使价值最大化,要求第
个物品放入背包后总重量不超过限制且总价值比之前大。则有状态转移方程:
