每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)

目录

力扣377. 组合总和 Ⅳ(似包非包)

解析代码


力扣377. 组合总和 Ⅳ(似包非包)

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

进阶:如果给定的数组中含有负数会发生什么?问题会产生何种变化?如果允许负数出现,需要向题目中添加哪些限制条件?

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {

    }
};

解析代码

        需要知道的是背包问题本质上求的是组合数问题,而这一道题虽然题目是组合总数,但求的是排列数问题(排列是无序的,组合是有序的),题目感觉不太严谨。(虽然不能用背包问题解决,但代码类似背包问题,所以称为似包非包)用常规的 dp 思想来解决这道题。

        这道题的状态表示就是根据拆分出相同子问题的方式,抽象出来一个状态表示: 当在求 target 这个数一共有几种排列方式的时候,对于最后一个位置,如果我们拿出数组中的一个数 x ,接下来就是去找 target - x 一共有多少种排列方式。 因此可以抽象出来一个状态表示:

dp[i] 表示:总和为 i 的时候,一共有多少种排列方案

状态转移方程:

        线性 dp 状态转移方程分析方式,一般都是根据最后一步的状况,可以选择数组中的任意一个数 nums[j] ,其中 0 <= j <= n - 1 。

        当 nums[j] <= target 的时候,此时的排列数等于先找到 target - nums[j] 的方案数,然后在每t一个方案后面加上一个数字 nums[j] 即可。 因为有很多个 j 符合情况,因此我们的状态转移方程为: dp[i] += dp[target - nums[j]] ,其中 0 <= j <= n - 1 。

初始化: 和为 0 的时候,可以什么都不选,空集一种方案,因此 dp[0] = 1 。

填表顺序: 根据状态转移方程易得从左往右。

返回值: 根据状态表示,返回 dp[target]。

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        // dp[i] 表示:总和为 i 的时候,一共有多少种排列方案
        vector<double> dp(target + 1, 0); // double防溢出
        dp[0] = 1;
        int sz = nums.size();
        for(int i = 1; i <= target; ++i)
        {
            for(int j = 0; j < sz; ++j)
            {
                if(i >= nums[j])
                    dp[i] += dp[i - nums[j]];
            }
        }
        return dp[target];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功&#xff0c;尤其是那些涉及大量数据和复杂模式的识别任务&#xff0c;如图像识别、语音识别和自然语言处理等。然而&#xff0c;这并不意味着浅层机器学习&#xff08;如支持向量机、决策树、朴素贝叶斯等&#xff09;已经失去了…

【Linux】:文本编辑与输出命令 轻松上手nano、echo和cat

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、nano1.1 打开文件&#xff1a;1.2 常用快捷键&#xff1a;1.3 其他功能&#xff…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

DBA-现在应该刚刚入门吧

说来话长 在2023年以前&#xff0c;我的DBA生涯都是“孤独的”。成长路径除了毕业前的实习期有人带&#xff0c;后续几乎都是靠自学。如何自学&#xff0c;看视频、看文档、网上查阅资料、项目实战。 可能是学疏才浅 &#xff0c;一直都是在中小公司混&#xff0c;在中小公司通…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块&#xff0c;本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩&#xff0c;并且在随后的许…

3ds Max2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 3ds Max是一款基于PC系统的强大3D建模、渲染和制作软件&#xff0c;广泛应用于游戏开发、影视后期制作、建筑设计、工业设计等多个领域。其拥有丰富的建模工具&#xff0c;可轻松创建逼真的三维场景和模型&#xff1b;同时&#…

揭秘!综合布线可视化管理软件如何助力集成商实现价值飞跃?

一、弱电集成商发展现状 近期小编通过与多家做弱电集成的朋友交流探讨了解到目前弱电集成商发展如同2024年国内大部分企业一样举步维艰&#xff0c;当然也有个别企业做的项目优质并且利润可观&#xff0c;但是整体不多&#xff0c;总结原因主要有以下几点&#xff1a; 工程项目…

【git】git ignore如何添加core/config.py忽略

在Git中&#xff0c;.gitignore文件用于指定不被Git追踪的文件和文件夹。要添加core/config.py文件到.gitignore中&#xff0c;你需要编辑.gitignore文件并添加以下行&#xff1a; core/config.py这行表示Git应该忽略名为config.py的文件&#xff0c;它位于core目录下。确保在…

【剪映专业版】17高质量视频如何导出

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 1.导出 目的&#xff1a;导出高质量的视频 如果没有音频及字幕的情况下&#xff0c;音频导出和字幕导出为灰色 2.视频导出 超清&#xff1a;1080P 注意&#xff1a;如果原始素材的分辨率为小于1080P&#xff0c;如果导…

算法:期望场景;鲁棒优化

部分代码 for i1:T stst[D_DGk(i)*min_P_DG<P_DGk(i)<D_DGk(i)*max_P_DG]; end for i2:T indicatorD_DGk(i)-D_DGk(i-1); rangei:min(T,iT_up-1); st st[D_DGk(range)>indicator]; end for i2:T indicatorD_DGk(i-1)-D_DGk(i); rangei:min(T…

Linux - Docker 安装 Nacos

拉取 Nacos 镜像 使用以下命令从 Docker Hub 拉取最新版本的 Nacos 镜像&#xff1a; docker pull nacos/nacos-server启动 Nacos 容器 使用以下命令启动 Nacos 容器&#xff1a; docker run -d \--name nacos \--privileged \--cgroupns host \--env JVM_XMX256m \--env M…

Darknet,看过很多篇,这个最清晰了

Darknet深度学习框架&#xff1a;YOLO背后的强大支持 Darknet&#xff0c;一个由Joseph Redmon开发的轻量级神经网络框架&#xff0c;以其在计算机视觉任务&#xff0c;特别是目标检测中的卓越表现而闻名。本文将详细介绍Darknet的基本概念、结构以及它在深度学习领域的应用。…

nvm版本控制nvm list available报错

# 配置node镜像&#xff1a; node_mirror: https://npmmirror.com/mirrors/node/ # 配置npm镜像&#xff1a; npm_mirror: https://npmmirror.com/mirrors/npm/ 2024.4.22换域名了&#xff0c;改成这个才能用别的不行

揭秘! 商业模式并不是传销!七星创客模式!

关于“商业模式是否等同于拉人头、传销”的疑问&#xff0c;近期在社会上引起了广泛的讨论。很多人一提到商业模式&#xff0c;就会联想到拉人头、传销等负面概念&#xff0c;似乎所有的商业模式都被贴上了这样的标签。 然而&#xff0c;商业模式的内涵远不止于此。商业活动中的…

Linux上的uname

2024年4月19日&#xff0c;周五上午 这是我第一篇用CSDN上的markdown编辑器写的博客&#xff0c;感觉还不错 uname 是一个常用的命令行工具&#xff0c;uname 的全称是 “Unix Name”&#xff0c;它是一个 Unix 和类 Unix 操作系统上的命令行工具&#xff0c;用于获取操作系统相…

mysql面试题八(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

《项目管理超图解》新书来了:快速提升团队行动力的8个关键!

各位&#xff0c;速来对号入座&#xff01; 你的团队&#xff0c;是这样&#xff1f;↓ 还是……这样&#xff1f;↓ 团队失控、协作混乱、项目逾期……有没有可能&#xff0c;是团队行动力出了问题&#xff1f; 所以各位管理者们、创业者们、产品经理/项目经理们、项目管理从…

短说社区的权限设计解读

社区网站的权限设计是非常重要的&#xff0c;合理的权限设计可以维护网站的安全性、保护用户的隐私信息&#xff0c;同时也可以优化用户体验&#xff0c;提升网站的用户参与度。 本文以短说论坛产品为例&#xff0c;讲解下网站的权限如何规划和设计。 短说社区论坛这边考虑到了…

请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 请编写一个函…