一、leetcode第518题
该题是完全背包问题,不需要考虑物品放入背包的先后顺序。
具体代码如下:
class Solution {
public:int change(int amount, vector<int>& coins) {vector<int>dp(amount+1,0);dp[0]=1;for(int i=0;i<coins.size();i++){for(int j=coins[i];j<=amount;j++){dp[j]+=dp[j-coins[i]];}}return dp[amount];}
};
二、leetcode第377题
本题是完全背包问题,要考虑物品放入背包的先后顺序,因此要先遍历背包再遍历物品。
具体代码如下:
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int>dp(target+1,0);dp[0]=1;for(int i=0;i<=target;i++){for(int j=0;j<nums.size();j++){if(i-nums[j]>=0&&dp[i]<INT_MAX-dp[i-nums[j]]){dp[i]+=dp[i-nums[j]];}}}return dp[target];}
};