递推公式:
1、问能否能装满背包或者最多装多少:
dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
2、问装满背包有几种方法
dp[j] += dp[j - nums[i]]
3、问背包装满最大价值
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
4、问装满背包所有物品的最小个数
dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
遍历顺序:
01背包
1、二维dp数组01背包先遍历物品或者先遍历背包都可,且第二层for循环是从小到大遍历
2、一维dp数组01背包只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历
完全背包
从小到大遍历
1、纯完全背包的一维dp数组实现,先遍历物品或者先遍历背包都可
2、求组合数 外层物品 内层背包
3、求排列树 外层背包 内层物品
4、求最小数 遍历顺序无所谓