问能否能装满背包(或者最多装多少):
dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
问装满背包有几种方法:
dp[j] += dp[j - nums[i]]
问背包装满最大价值:
dp[j] = max(dp[j],
dp[j - weight[i]] + value[i]);
问装满背包所有物品的最小个数:
dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
一维dp数组01背包只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。
纯完全背包的一维dp数组实现,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。
但是仅仅是纯完全背包的遍历顺序是这样的,题目稍有变化,两个for循环的先后顺序就不一样了。
如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品。