代码随想录算法训练营day44

完全背包

完全背包和01背包的区别就是物品可以重复无限使用,因此二层循环要变为正序。

#include <iostream>
#include <vector>
using namespace std;

void test_CompletePack(vector<int> weight, vector<int> value, int bagWeight) {

    vector<int> dp(bagWeight + 1, 0);

    for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
        for(int i = 0; i < weight.size(); i++) { // 遍历物品
            if (j - weight[i] >= 0) dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
        }
    }
    cout << dp[bagWeight] << endl;
}

int main() {
    int N, V;
    cin >> N >> V;
    vector<int> weight;
    vector<int> value;
    for (int i = 0; i < N; i++) {
        int w;
        int v;
        cin >> w >> v;
        weight.push_back(w);
        value.push_back(v);
    }
    test_CompletePack(weight, value, V);
    return 0;
}

518. 零钱兑换 II

五部曲:

  • dp数组下标及含义:凑成总金额j的货币组合数为dp[j]
  • dp数组初始化:dp[0]=1
  • 递推公式:dp[j] += dp[j - coins[i]];
  • 遍历方向:先遍历物品在遍历背包
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];
    }
};

377. 组合总和 Ⅳ

五部曲:

  • dp数组下标及含义:凑成目标正整数j的组合数为dp[i]
  • dp数组初始化:dp[0]=1
  • 递推公式:dp[i] += dp[i - nums[j]];
  • 遍历方向:先遍历物品在遍历背包

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

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

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];
    }
};

相关推荐

  1. 代码随想算法训练day44

    2024-04-26 05:52:02       34 阅读
  2. 代码随想算法训练day44

    2024-04-26 05:52:02       35 阅读
  3. 代码随想算法训练day41

    2024-04-26 05:52:02       35 阅读
  4. 代码随想算法训练day48

    2024-04-26 05:52:02       34 阅读
  5. 代码随想算法训练day45

    2024-04-26 05:52:02       32 阅读
  6. 代码随想算法训练29期Day43|LeetCode 1049,494,474

    2024-04-26 05:52:02       49 阅读
  7. 代码随想算法训练29期Day29|LeetCode 491,46,47

    2024-04-26 05:52:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 05:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 05:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 05:52:02       87 阅读
  4. Python语言-面向对象

    2024-04-26 05:52:02       96 阅读

热门阅读

  1. 【Spring高级】@Value注解

    2024-04-26 05:52:02       36 阅读
  2. Redis面试题一(基本概念)

    2024-04-26 05:52:02       28 阅读
  3. 考研数学精选题目015

    2024-04-26 05:52:02       28 阅读
  4. linux网络

    2024-04-26 05:52:02       25 阅读
  5. c++primer13.1.4小节答案

    2024-04-26 05:52:02       33 阅读
  6. DevOps的出现带来的变化

    2024-04-26 05:52:02       36 阅读
  7. 材质系统(1):起源与概念

    2024-04-26 05:52:02       25 阅读