首页 > 其他分享 >【完全背包的排列问题】NO377. 组合总和 Ⅳ

【完全背包的排列问题】NO377. 组合总和 Ⅳ

时间:2023-04-29 11:11:31浏览次数:47  
标签:遍历 target 组合 nums 背包 NO377 dp 总和

[完全背包排列问题] 377. 组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

示例 1:

输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。

示例 2:

输入:nums = [9], target = 3
输出:0

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 1000
  • nums 中的所有元素 互不相同
  • 1 <= target <= 1000

​ 很明显的一道完全背包问题,问题就在于这道题的要求是顺序不同的序列被视作不同的组合,这里的组合实际上就是排列,因此需要改变遍历顺序:

  • 先遍历背包再遍历容量,结果为组合的数量
  • 先遍历容量再遍历背包,结果为排序的数量

​ 其实很好理解,如果先遍历背包的话,那么结果的顺序只能是背包值的顺序,而如果先遍历容量的话,则由于前一个容量已经包含了所有背包的使用情况,所以遍历的当前容量再遍历背包就不会和前面的背包有顺序关系。

    public int combinationSum4(int[] nums, int target) {
        var len = nums.length;
        var dp = new int[target+1];
        dp[0] = 1;
        for(var i = 1; i <= target; i++) {
            for(var j = 0; j < len; j++) {
                if(i >= nums[j]) {
                    dp[i] += dp[i-nums[j]];
                }
            }
        }
        return dp[target];
    }

标签:遍历,target,组合,nums,背包,NO377,dp,总和
From: https://www.cnblogs.com/tod4/p/17363713.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:组合总和
    题目:给你一个无重复元素的整数数组 candidates和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target的所有 不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被......
  • JS获取table中选中某几行其中某一列数值的总和
    JS获取table中选中某几行其中某一列数值的总和一、思路1.如何获取某几行,并且可以实时变化数值?实现如下:$("input[type='checkbox']").click(function(){alert($(this).val());})2.接下来就是实现当每次触发点击事件以后,然后,计算其中的值,实现如下:<script>$(functi......
  • 背包问题-动态规划
    概念背包问题是一类组合优化问题,抽象定义:有一系列的物品,每样都有重量和价值,选择一些物品使得总的重量不超过限制,总的价值尽可能大。背包是一种隐喻,即假设某人有固定容量的背包,怎样选择物品,使得物品的总价值最高。应用投资组合选择原料最优化切割Merkle–Hellman密钥的生......
  • ***通俗易懂【动态规划】01背包问题
    问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,即:eg:number=4,capacity=8i(物品编号)1234w(体积)2345v(价值)3456 总体思路根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条......
  • LeetCode 40.组合总和II
    1.题目:给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。示例 1:输入:candidates= [10,1,2,7,6,1,5],target= ......
  • leetcode377.组合总和IV
    classSolution{public:longlongf[1010];//f[i]表示总和为i的选法个数intcombinationSum4(vector<int>&nums,inttarget){intn=nums.size();f[0]=1;for(inti=0;i<=target;i++)for(intj=0;j<n;j++)......
  • 简单背包
    简单背包TimeLimit:1000MS     MemoryLimit:32768KB     64bitIOFormat:%I64d&%I64uSubmit StatusDescription在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 Inpu......
  • 饭卡 (01背包)
    饭卡TimeLimit:5000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):16574    AcceptedSubmission(s):5763ProblemDescription电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商......
  • 【LeetCode动态规划#07】01背包问题一维写法(状态压缩)实战,其二(目标和、零一和)
    目标和(放满背包的方法有几种)力扣题目链接(opensnewwindow)难度:中等给定一个非负整数数组,a1,a2,...,an,和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数S的所有添加符号的......
  • 背包典型例题
    一、01背包for(inti=V;i>=c[i];--i){ dp[i]=max(dp[i],dp[i-c[i]]+w[i])}hdu3466。这个题要考虑dp的无后效性质,简单来说,就是dp与物品排布有关的时候,我们应该选择最优的那一个。如果单独选择i,j都没有问题的时候。如果先选i再选j可以做到,反之不可以。那么说明pi+qj<pj+......