1. 01背包
问题描述:n种物品放入体积为m的包中,每个物品的个位为1,每个物品的体积为volume[i],价值为value[i],求最大化价值的放入方法
思路:f[i][j]表示把第i个物品放入体积为j的背包中的最大价值,可以选择不放入,即f[i][j] = f[i-1][j],可以选择放入,即f[i][j] = f[i-1][j-vloume[i]]+value[i],取两者的最大值。
2. 完全背包
问题描述:n种物品,每种物品的个数无限,求最大价值的放入方法
思路: 01背包问题的思路可以看做,对每种物品,选择放入或者不放入;完全背包则是对每种物品,选择不放入或者放入x个
选择不放入,f[i][j] = f[i-1][j]
选择放入, f[i][j] = f[i-1][j-k*volume[i]]+k*value[i],即在前一个物品的基础上,如果剩余k个第i个物品的空间,选择将k个第i个物品放入,如果k=0,则与不放入相同
因此有k+1中可能性(当然,要保证有足够大的背包空间,即j-k*volume[i] >= 0),取最大者
3. 多重背包问题
问题描述: n种物品,每个物品的数量为有限个num[i],求最大化价值的放入方法
思路: 同完全背包问题,只不过k的取值受到限制,不得超过num[i]