- 动态规划的分析角度
- 状态表示
- 属性(最大值,最小值...)
- 集合
- 所有选择
- 条件(体积小于某数,只能从前i个数里选)
- 状态计算
- 集合划分
- 状态表示
根据上面的方法可以分析
- 0-1背包问题:
- 状态表示:
- 属性:最大值。
- 集合:选择是否放入背包。对于每个物品,我们可以选择将其放入背包(表示为1)或不放入背包(表示为0)。
- 状态计算:
- 集合划分:对于每个物品和背包容量,我们需要考虑以下两种情况:
- 如果当前物品的重量超过了背包的容量,则无法放入背包,此时的最大价值与上一个物品时的最大价值相同。
- 如果当前物品的重量可以放入背包,我们需要考虑将其放入背包与不放入背包两种情况的最大价值,选择较大的那个作为当前状态的最大价值。
- 集合划分:对于每个物品和背包容量,我们需要考虑以下两种情况:
- 完全背包问题:
- 状态表示:
- 属性:最大值。
- 集合:选择物品的数量。对于每个物品,我们可以选择将其放入背包的不同数量,从0到无穷大。
- 状态计算:
- 集合划分:与0-1背包问题类似,但不同之处在于对于每个物品,我们需要考虑所有可能的数量。我们需要遍历所有的数量,计算放入当前物品和不放入当前物品的情况下的最大价值,并选择其中的最大值作为当前状态的最大价值。