Day43题目
完全背包问题,注意结果集顺序的影响
LeetCode518零钱兑换:
核心思想:完全背包问题,与01背包不同,完全背包每个元素可以使用无限次.那么只要把一维数组中容量遍历顺序改为从前到后即可
class Solution {
public int change(int amount, int[] coins) {
int[] dp = new int[amount+1];
dp[0] =1 ;
for(int i = 0; i < coins.length; i ++){
for(int j = coins[i]; j <= amount ; j ++){
dp[j] += dp[j-coins[i]];
}
}
return dp[amount];
}
}
LeetCode377.组合总和:
核心思想:这个题目和上面的区别是组合顺序不同,看作是不一样的答案
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target+1];
dp[0] = 1;
// 先容量后元素就可以得到带有顺序的排序
for(int i = 0 ; i <= target ; i ++){
for(int j = 0; j < nums.length ; j ++){
if (i >= nums[j]) {
dp[i] += dp[i - nums[j]];
}
}
}
return dp[target];
}
}