2019/2/6 写给自己背包问题的小总结,
背包问题:
①. 0/1背包, 每个物品只有1个,即只能选或者不选, 用结构体存贮每个物品的重量和价值,
然后fori(遍历每个物品),再forj(1-i);
②. 完全背包.每个物品都有无限个,可以选择无限个, 用结构体存贮每个物品的重量和价值,
然后fori(遍历每个物品),再forj(i-1);
③. 多重背包.每个物品有有限个数,可以选择特定个,用二进制优化,将每种相同物品拆解成捆绑在一起的数个可看成单个的物品,
然后当做0/1背包来求解.
是否恰好装满,
①. 没要求恰好装满,那么dp初始化全为0;
②. 要求恰好装满,那么dp[0]=0;dp[其他]=负inf;