代码随想录算法训练营第三十七天-动态规划-完全背包-377. 组合总和 Ⅳ

  • 这是一道与上一题几乎一样的题目
  • 不同点是在上一题是组合,这道题是排列
  • 所以就要用先循环背包,内循环为物品来实现排列效果
  • 总结:
    • 对纯完全背包,求装满这个背包的最大价值,或者问能不能装满这个背包,那么两层for循环不分内外,谁在外层或内层都没有影响
    • 如果问题变为装满这个背包有多少种方法,求
  • 扩展:这道题与爬楼梯类似
    • 爬楼梯是有两种方式,一层或二层,如果有m层呢,就相当于本题集合中元素有{1, 2, 3,..., m},代表了m种爬楼梯方法(值代表一次可以爬的层数),问到达楼顶有多少种方法,这其中的楼顶层数就类似于本题中的target(万万没想到这还能联系上)
cpp 复制代码
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];
    }
};
  • 测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]
  • 汇总
相关推荐
203号居民1 小时前
LeetCode hot 100 — 25. K 个一组翻转链表
算法·leetcode·链表
ocean21032 小时前
2025-2026年AI算法与模型研发面试高频知识点洞察
人工智能·算法·面试
Nil2082 小时前
leetcode 78子集
数据结构·算法·leetcode
喜欢吃燃面3 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
en.en..3 小时前
Linux fork() 工作原理
数据结构·算法
FlightYe3 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
地平线开发者4 小时前
bevformer算法模型详细解读
算法
liliangcsdn4 小时前
ICIR权重矩阵如何加权标准化为综合因子
算法
ShineWinsu4 小时前
对于MySQL:数据库的操作的解析
linux·数据库·c++·mysql·面试·笔试·库的操作
云小逸4 小时前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++