代码随想录算法训练营第44天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ

  • 今日学习的文章链接,或者视频链接

第九章 动态规划part06

  • 自己看到题目的第一想法

  • 看完代码随想录之后的想法

518

class Solution {
public:
    int change(int amount, vector& coins) {
        //dp[j]表示装满j的背包有dp[j]种方法,求dp[amount]
        //dp[j] += dp[j-coins[i]]
        vector dp(amount+1,0);
        dp[0] = 1;
        //先物品再背包求组合数
        for (int i = 0;i

377

class Solution {
public:
    int combinationSum4(vector& nums, int target) {
        int MOD = INT_MAX;
        vector dp(target+1,0);
        dp[0] = 1;
        for(int j=0;j<=target;j++){
            for(int i = 0;i=nums[i]){
                    //dp[j] += dp[j-nums[i]];
                    dp[j] = (dp[j] + dp[j-nums[i]]) % MOD;
                }
            }
        }
        return (int)dp[target];
    }
};

  • 自己实现过程中遇到哪些困难

  • 今日收获,记录一下自己的学习时长

  • 如果求组合数就是外层for循环遍历物品,内层for遍历背包。
  • 如果求排列数就是外层for遍历背包,内层for循环遍历物品。

你可能感兴趣的:(leetcode,c++,算法)