【dp】排列问题——零钱兑换和组合总和IV

news2024/11/29 0:30:32

文章目录

    • 零钱兑换
    • 组合总和IV

零钱兑换

在这里插入图片描述

很明显,本题使用完全背包算法,求解的是组合数,直接使用完全背包算法即可,为什么是组合数呢?

如果题目说 amount=5,coins=[1,2,5] 有9种方法,那就是排列数(挑选的元素有先后顺序),如下:

5=5
5=1+2+2
5=2+1+2
5=2+2+1
5=2+1+1+1
5=1+2+1+1
5=1+1+2+1
5=1+1+1+2
5=1+1+1+1+1
class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int m = coins.size();
        int n = amount;
        vector<int> dp(n + 1, 0);  // dp[i]:容量为i的背包装满,最多有dp[i]种装法
        dp[0] = 1;
        // 组合:先物品、后容量
        // 遍历物品
        for(int i = 0; i < m; i++){
            // 完全背包:顺序遍历容量
            for(int j = coins[i]; j <= n; j++){
                dp[j] = dp[j] + dp[j - coins[i]];
            }
        }
        return dp[n];
    }
};

组合总和IV

在这里插入图片描述

题目有强调:顺序不同的序列被视作不同的组合

即我们本题求解是排列数

dp[i]: 使用数组nums,凑成整数 i 的排列个数

dp[i] = dp[i-nums[0]] + dp[i-nums[1]] + dp[i-nums[2]] + …

举个例子比如nums = [1,2,3],target = 4

dp[4] = dp[4-1] + dp[4-2] + dp[4-3] = dp[3] + dp[2] + dp[1]

其实就是说4的排列数可以由三部分组成:1和dp[3]、2和dp[2]、3和dp[1]

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        // 完全背包
        // 排列:先容量、后物品
        int m = nums.size();
        int n = target;
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for(int j = 1; j <= n; j++){
			for(int i = 0; i < m; i++){
				// 每一个小于当前容量j的物品nums[i],都会被当作第一个元素
				if(nums[i] <= j) dp[j] += dp[j - nums[i]];  
			}
		}
        return dp[n];
    }
};

为什么不能先遍历物品,后遍历容量呢?

如果先遍历物品,后遍历容量的话,举一个例子:计算dp[3]的时候,结果集只有 {1,2} 这样的集合,不会有{2,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探秘SSD磨损均衡和闪存管理

一块2TB的SSD要进行3000PE耐久度测试&#xff0c;需要在顺序写入方式下&#xff08;写入放大比接近1&#xff09;写入2TB x 30006000TB的数据&#xff0c;这需要相当长的时间才能完成。有朋友可能会问&#xff1a;在SSD里划分一个1GB容量的小分区&#xff0c;往里面覆盖写入300…

2022年总结:责任驱动开源

文章目录概览阅读2022阅读清单2023 阅读目标文章2022文章列表2023 目标社区WeDataSpherecube-studio &#xff08;aiops平台&#xff09;社区展望小结概览 2022年一年过去&#xff0c;在此总结过往&#xff0c;展望未来&#xff0c;每年都写总结&#xff0c;我希望继往开来&am…

STC单片机基于Keil平台在线调试仿真

STC单片机基于Keil平台在线调试仿真⚡目前STC32G12K128型号的单片机仅支持需要通过SWD接口&#xff08;STC-USB LINK 1D&#xff09;进行调试&#xff0c;STC8H系列可以通过HID接口或者串口进行调试&#xff0c;其他不带HID功能型号的只能通过串口进行调试。 ✨初次调试&#x…

RHCE——编写playbook ansible

1.按照要求定义以下变量。&#xff08;可以在多个位置下定义实现相应操作即可&#xff09; | 变量名 | 值 | | --------- | ------- | | file_name | newfile | | user_name | devops | | pk_name | httpd | 2.编写任务模块在node1和node2主机中根据以上变量值创建对应文本文件…

IPC进程间通信-管道

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、了解进行间通信①进程间通信的必要性②进程间通信的技术背景二、管道①管道原理管道原理&#xff0c;三步走管道pipe②匿名管道进程间通…

CANoe-System And Communication Setup介绍

如同经典通信模式中,在Simulation Setup界面创建网络、添加节点、导入dbc数据库一样,新型通信模式使用System And Communication Setup完成这些配置 System And Communication Setup是通信配置的中心起点,在这里你可以配置: 应用层(application models)通信层(communic…

【自学Python】Python bytes类型

Python bytes类型 Python bytes类型教程 Python3 新增了 bytes 类型&#xff0c;用于代表字节序列。 字符串(string) 是一串字符组成的序列&#xff0c;字符串处理的基本单位是字符&#xff0c;bytes 类型是一串字节组成的序列&#xff0c;bytes 类型处理的基本单位是字节。…

三维重建基础: 坐标系 (更新中)

文章目录概述计算机视觉&#xff1a;投影矩阵M&#xff1a; 世界坐标系 -> 像平面坐标系相机坐标系 -> 像平面坐标系&#xff1a;世界坐标系 -> 相机坐标系计算机图形&#xff1a;MVP变换view/camera 变换常见坐标系定义colmap中的坐标系线性代数相关基础待办附录概述…

微信小程序安装 Vant 组件库与API Promise组件库

在项目内右键空白处选择在外部终端打开2、在终端窗口输入 npm init -y,创建package-lock.jsonnpm init -y3、在终端输入npm i vant/weapp1.3.3 -S --production&#xff0c;创建node_modules文件夹npm i vant/weapp1.3.3 -S --production4、详情&#xff0d;本地设置&#xff0…

安信证券资管清算重要业务在原生分布式数据库的创新实践

作者&#xff1a;安信证券信息技术委员会运维部系统平台室 刘盛彩、肖昭、张杰 来源:《金融电子化》 近日&#xff0c;《国务院关于数字经济发展情况的报告》&#xff08;以下简称报告&#xff09;提请十三届全国人大常委会第三十七次会议审议&#xff0c; 报告提出&#xff1a…

【Vue + Koa 前后端分离项目实战8】使用开源框架==>快速搭建后台管理系统 -- part8 【权限控制联调】

不要为了不值得的事和人感伤悲秋 本章主要关联章节&#xff1a;【Vue Koa 前后端分离项目实战3】使用开源框架&#xff1e;快速搭建后台管理系统 -- part3 权限控制行为日志_小白Rachel的博客-CSDN博客_koa权限管理 本章主要实现综合的系统权限管理 目录 一、权限控制说明 二…

【Linux】Linux常用指令(28个,以及热键,关机重启)

文章目录1、ls 指令2、pwd 命令3、cd 指令4、touch 指令5、mkdir 指令6、rmdir和rm 指令7、man 指令8、cp 指令9、mv 指令10、cat11、echo(输出&#xff0c;输入&#xff0c;追加重定向)12、wc13、more14、less15、head16、tail(以及管道 | )17、date18、cal19、find(which、wh…

KubeSphere使用外部ES进行日志收集(多行日志)

环境kubesphere &#xff1a; v3.3.1Docker&#xff1a;20.10.8Fluent-Bit&#xff1a;2.0.6-2.0.8ESKibana&#xff1a;7.9.3Docker日志示例{"log":"2023-01-10 11:32:50.021 - INFO --- [scheduling-1] traceId: p6spy : 1|conn-0|statement|SELECT fd_id A…

Java 泛型的介绍和使用

什么是泛型? 1.数据类型变得广泛,或者是数据类型变量化,这就是泛型.(广泛的类型). 2.有一个变量是用来存放一个数据类型,这就叫做泛型. 比如泛型T存放的是一个int 就表示为:Tint 当然T也可以是其他的数据类型,就取决我们给它数据类型. 3.泛型允许程序员在强类型程序设计语…

kafka zookeeper单机版安装部署全教程 含安装包

kafka zookeeper安装部署全教程 含安装包 大家好&#xff0c;我是酷酷的韩~ 一.基础软件安装 1.JDK安装部署 linux安装jdk1.8全教程(包含安装包) 二.安装包准备 1.kafka (kafka_2.12-2.8.0.tgz) https://kafka.apache.org/downloads 2.zookeeper (apache-zookeeper-3.7.…

最近爆火的电子血氧仪的基本原理

继口罩、抗原、药品之后,最近电子血氧仪的价格也开始水涨船高。从一个多月前的100多元,暴涨到了300多元。 那么,这类家用的电子血氧仪是如何工作的呢?测量数据到底准不准?今天就带大家来分析一下。 一、血氧仪工作原理 血氧仪是一种监测脉搏、血氧饱和度等指标的医疗器械…

人工智能-EM算法

目录1、EM算法2、EM算法介绍3、EM算法实例1、EM算法 EM算法&#xff1a;期望最大化算法。解决数据缺失情况下的参数估计问题 它是一个基础算法&#xff0c;是HMM等的基础 期望步:E步,最大步M步 步骤&#xff1a; 1&#xff0c;根据已经给出的观测数据&#xff0c;估计出模型参…

世界上第一款启用 QMK/VIA 的薄型无线机械键盘 Keychron K3 Pro 我刚刚入手

文章目录1. Keychron K3 Pro 是什么2. 键盘参数3. 打字音效测试4. 超薄5. 支持热插拔6. 薄型 Gateron 开关7. 薄型双射 PBT 键帽8. 多功能键9. 键盘部件可自定制10. 电池11. QMK 和 VIA 定制12. 产品清单13. 与 keychron k3 对比14. 与 keychron 其他系列对比14.1 为什么没有选…

Swin Transformer阅读笔记

Swin Transformer 使用了移动窗口的层级式的Vit&#xff08;Hierarchical Vision Transformer using Shifted Windows&#xff09; 总体来说&#xff1a;Swin Transformer想让Transformer像卷积神经网络一样&#xff0c;可以分为多个block&#xff0c;可以做层级式特征提取&a…

Flowable工作流——基础篇

1. 介绍 Flowable是BPMN的一个基于Java的软件实现&#xff0c;但是不仅仅限于BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有自己的用户管理&#xff0c;微服务API的功能&#xff0c;是一个服务平台。 是由开发了Acitivity6的开发人员&#xff0c;再次升…