1.一维的01背包为啥要逆序(保证更新f[j]时,f[ j - weight[i] ]是没有放入物品i时的数据即f[ i - 1 ][ j - weight[i] ],因为01背包每个物品至多被选一次。而完全背包中,每个物品可以被选无限次,那么状态f[i][j],正好可以由可能已经放入物品i的状态f[ i - 1 ][ j - weight[i] ]转移而来。所以,遍历顺序改为顺序时,就是完全背包问题,其余都不用变~)
就是说 正序:在同一阶段里面后面更新的是会被前面更新的影响的。而逆序不会,01背包是逆序,因为更新只有一件,不需要考虑同一阶段的相互影响,但是完全背包是顺序,因为是无数多件,要考虑同一阶段件数的相互影响)
2.完全背包 和 01背包 的区别仅在于状态更新时的遍历顺序。(即01是逆序,完全是顺序)
3.不超过容量 和 恰好装满 的区别仅在于二者的初始化~(前者全0;后者,f[i][0] = 0(第一列),其余全为0x80000000,一维:除f[0]为0外,其余f[j]都是负无穷)
4.循环边界 i:【1,N】,j:【V,weight[i]】
5.多重背包问题可以拆分为 01背包 与 完全背包 的组合。