代码随想录算法训练营第三十七天-动态规划-完全背包-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]
  • 汇总
相关推荐
一直都在57210 分钟前
数据结构入门:二叉排序树的构建与相关算法
数据结构·算法
_Minato_21 分钟前
数据结构知识整理——复杂度的计算
数据结构·经验分享·笔记·算法·软考
listhi52023 分钟前
针对燃油运输和车辆调度问题的蚁群算法MATLAB实现
前端·算法·matlab
月明长歌38 分钟前
【码道初阶】【LeetCode 102】二叉树层序遍历:如何利用队列实现“一层一层切蛋糕”?
java·数据结构·算法·leetcode·职场和发展·队列
神仙别闹41 分钟前
基于QT(C++)实现的翻金币游戏
c++·qt·游戏
星诺算法备案1 小时前
读懂大模型备案流程,开启技术安全应用新征程
人工智能·算法·推荐算法·备案
Loo国昌1 小时前
大型语言模型推理范式演进:从提示工程到思维算法
人工智能·算法·语言模型·自然语言处理
UP_Continue1 小时前
C++--右值和移动语义
开发语言·c++
代码游侠1 小时前
学习笔记——线程控制 - 互斥与同步
linux·运维·笔记·学习·算法
yaoh.wang1 小时前
力扣(LeetCode) 66: 加一 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽