题目:有 NN件物品和一个容量为 V 的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。
状态f[i][j]定义:前 i 个物品,背包容量 jj下的最优解(最大价值):
当前的状态依赖于之前的状态,每一次对第 i 件物品的决策,状态f[i][j]不断由之前的状态更新而来。
当背包容量不够j<v[i]只能选择i-1个物品对应代码:f[i][j]=f[i-1][j]
当背包容量够用就j>=v[i];此时还需要考虑选不选择第i个物品;
选择:f[i][j]=f[i-1][j-v[i]+w[i]]
不选:f[i][j]=f[i-1][j]
取两者的最大值max();