代码随想录算法训练营第三十七天-动态规划-完全背包-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]
  • 汇总
相关推荐
闻缺陷则喜何志丹41 分钟前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
CoovallyAIHub44 分钟前
如何在手机上轻松识别多种鸟类?我们发现了更简单的秘密……
深度学习·算法·计算机视觉
第二只羽毛1 小时前
遵守robots协议的友好爬虫
大数据·爬虫·python·算法·网络爬虫
BestOrNothing_20151 小时前
一篇搞懂 C++ 重载:函数重载 + 运算符重载,从入门到会用(含 ++、<<、== 实战)
c++·函数重载·运算符重载·operator·前置后置++·重载与重写
艾斯比的日常1 小时前
Java 三色标记算法:并发垃圾回收的核心技术解析
java·开发语言·算法
2501_941144421 小时前
Python + C++ 异构微服务设计与优化
c++·python·微服务
CoovallyAIHub1 小时前
抛弃LLM!MIT用纯视觉方法破解ARC难题,性能接近人类水平
深度学习·算法·计算机视觉
程序猿编码1 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
高洁012 小时前
具身智能-视觉语言导航(VLN)
深度学习·算法·aigc·transformer·知识图谱
Croa-vo2 小时前
TikTok 数据工程师三轮 VO 超详细面经:技术深挖 + 建模推导 + 压力测试全记录
javascript·数据结构·经验分享·算法·面试