01背包和完全背包
01背包内层循环应从大到小
完全背包内层循环应从小到大
背包问题一般外层循环为物品,内层循环为背包
对01背包来说,一维dp数组不可以交换顺序,
一定是先物品后背包,背包一定是倒序遍历,保证一个物品只添加一次。
对于完全背包来说不同顺序所求的意义不同
如在力扣518零钱兑换Ⅱ中,外层循环为物品,内层循环为背包求的是组合数;
但与0-1背包不同的是,此处内层循环需要从正序遍历(小到大),以保证 每个物品添加多次。
外层循环为背包,内层循环为物品求的是排列数;
此处需要注意的是,在求dp[j]时要加上判断条件 :
if (j - nums[i] >= 0 && dp[j] < INT_MAX - dp[j - nums[i]])

浙公网安备 33010602011771号