01背包和完全背包

01背包内层循环应从大到小

完全背包内层循环应从小到大

背包问题一般外层循环为物品,内层循环为背包

对01背包来说,一维dp数组不可以交换顺序,

一定是先物品后背包,背包一定是倒序遍历,保证一个物品只添加一次。

对于完全背包来说不同顺序所求的意义不同

如在力扣518零钱兑换Ⅱ中,外层循环为物品,内层循环为背包求的是组合数

但与0-1背包不同的是,此处内层循环需要从正序遍历小到大),以保证 每个物品添加多次。

外层循环为背包,内层循环为物品求的是排列数

此处需要注意的是,在求dp[j]时要加上判断条件 :

if (j - nums[i] >= 0 && dp[j] < INT_MAX - dp[j - nums[i]])

 

posted @ 2023-04-10 10:39  编程小白bai  阅读(104)  评论(0)    收藏  举报