AcWing93. 递归实现组合型枚举:输出从1~n中随机选出的m个整数
题目
从 1∼ n n n 这 n n n 个整数中随机选出 m m m 个,输出所有可能的选择方案。
输入格式
两个整数 n , m , n,m, n,m, 在同一行用空格隔开。
输出格式
按照从小到大的顺序输出所有方案,每行 1 个。
首先,同一行内的数升序排列,相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如 1 3 5 7 排在 1 3 6 8 前面)。
数据范围
n > 0 n>0 n>0,
0 ≤ m ≤ n 0≤m≤n 0≤m≤n,
n + ( n − m ) ≤ 25 n+(n−m)≤25 n+(n−m)≤25
输入样例
5 3
输出样例
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
思考题:如果要求使用非递归方法,该怎么做呢?
思路
思路类似于AcWing92,但是多了一个个数限制。
另外,因为升序排列,所以可以枚举每个数,就可以形成一棵递归搜索树。可以枚举当前在哪层,以及当前以哪个数开始继续往下搜。
代码
#include <bits/stdc++.h>
#include <vector>
using namespace std;vector<int> chosen; //被选择的数void print_subset(int n, int m, int x) {//剪枝:无解的情况//选择超过了m个,或即使再选上剩余的所有数也不够m个,则无解//这条剪枝保证一旦进入无解的分支就会立刻返回if (chosen.size() > m || chosen.size() + (n - x + 1) < m) {return ;}if (x == n + 1) {for (int i = 0; i < chosen.size(); i++) {printf("%d ", chosen[i]);}printf("\n");return ;}//“选num” 分支chosen.emplace_back(x);//记录num已被选择print_subset(n, m, x + 1); 求解子问题chosen.pop_back(); ///回溯到上一问题之前,还原现场//“不选num” 分支print_subset(n, m, x + 1);}int main() {int n, m;scanf("%d%d", &n, &m);print_subset(n, m, 1);return 0;
}
因为剪枝,时间复杂度从 2 n 2^n 2n 降低为 C n m C_n^m Cnm。
递归搜索树写法:
#include <cstdio>
using namespace std;const int N = 30;
int path[N]; //存储路径(选择的数)
int n, m;void dfs(int u, int start) { //u当前层数,start当前在哪个数 if (u > m) { //已经找到了m个数for (int i = 1; i <= m; i++) {printf("%d ", path[i]);}puts("");} else {for (int i = start; i <= n; i++) {path[u] = i; //当前层选择的数是idfs(u + 1, i + 1);path[u] = 0; //恢复现场}}
}int main() {scanf("%d%d", &n, &m);dfs(1, 1);return 0;
}
相关文章:
AcWing93. 递归实现组合型枚举:输出从1~n中随机选出的m个整数
题目 从 1∼ n n n 这 n n n 个整数中随机选出 m m m 个,输出所有可能的选择方案。 输入格式 两个整数 n , m , n,m, n,m, 在同一行用空格隔开。 输出格式 按照从小到大的顺序输出所有方案,每行 1 个。 首先,同一行内的数升序排列&a…...
Java修仙传之Flink篇
大道三千:最近我修Flink 目前个人理解: 处理有界,无界流的工具 FLINK: FLINK定义: Flink特点 Flink分层API 流的定义 有界数据流(批处理): 有界流:数据结束了,程序也…...
网络新闻发稿为何经久不衰?
有的老板可能看不到新闻营销的直接回报,一直不乐意在此方面投入,但是却看到竞争对手一直在搞新闻营销,也就安排个PR做做新闻公关。小马识途营销顾问观察,自互联网诞生以来,新闻营销一直是网络营销工作中的一个重点。 如…...
Java SimpleDateFormat 中英文时间格式化转换
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。但是&…...
机器学习-基本知识
任务类型 ◼ 有监督学习(Supervised Learning) 每个训练样本x有人为标注的目标t,学习的目标是发现x到t的映射,如分类、回归。 ◼ 无监督学习(Unsupervised Learning) 学习样本没有人为标注,学习的目的是发现数据x本身的分布规律…...
Xilinx 7 系列 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性
如果通过LVDS进行接口,可以按照以程图中的步骤操作,以确保满足正确使用LVDS的所有要求。 40191 - 7 系列 - 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性 与LVDS兼容驱动器和接收器连接时,7系列LVDS和LVDS_25输入和输出应该不存在兼容性问…...
R语言在生态环境领域中的实践技术应用
R语言作为新兴的统计软件,以开源、自由、免费等特点风靡全球。生态环境领域研究内容广泛,数据常多样而复杂。利用R语言进行多元统计分析,从复杂的现象中发现规律、探索机制正是R的优势。为此,以鱼类、昆虫、水文、地形等多样化的生…...
ChineseChess.2023.10.31.01
中国象棋残局模拟器:黑双卒压禁区 中国象棋残局模拟器ChineseChess.2023.10.31.01...
数据库扩展语句和约束方式以及用户管理
数据库扩展语句和约束方式以及用户管理 create TABLE if not exists ky32 ( id int(4) zerofill primary key auto_increment, name varchar(10) not null, cradid int(18) not null unique key, hobby varchar (50) ); auto_increment:表示该字段可以自增长&…...
JMM 简单理解
JMM 简单理解 1 Java 内存模型 Java 内存模型(Java Memory Model,JMM),主要为了屏蔽各种硬件和操作系统的内存差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果,而设计的 2 工作内存与主内…...
微软Azure文本转音频,保存成MP3文件【代码python3】
标签: 文本转音频并保存mp3文件; 微软Azure; 微软Azure可以将文本转音频,并保存mp3文件,直接上代码 代码格式:python 3 import os import azure.cognitiveservices.speech as speechsdk# This example re…...
基于单片机的超声波探伤仪设计
摘要 超声波探伤仪是目前工业制造和现代化检测的重要途径之一,广泛的应用在质量检测和产品检测中,通过使用其产品能够有效地降低产品次品的风险。尽管随着电子技术的发展, 国内出现了一些数字化的超声检测仪器,但其数据处理及扩展…...
idea的设置
1.设置搜索encoding,所有编码都给换为utf-8 安装插件 eval-reset插件 https://www.yuque.com/huanlema-pjnah/okuh3c/lvaoxt#m1pdA 设置活动模板,idea有两种方式集成tomcat,一种是右上角config配置本地tomcat,一种是插件,如果使用插件集成,则在maven,pom.xml里面加上tomcat…...
高等数学啃书汇总重难点(八)向量代数与空间解析几何
持续更新,高数下第一章,整体来说比较简单,但是需要牢记公式,切莫掉以轻心~ 一.向量平行的充要条件 二.向量坐标的线性运算 三.向量的几何性质 四.数量积 五.向量积 六.混合积 七.曲面方程 八.空间曲线方程 九.平面的点法式方程 十…...
C#开发DLL,CAPL调用(CAPL>> .NET DLL)
文章目录 展示说明新建类库工程C# 代码生成dllCAPL脚本调用dll,输出结果展示 ret为dll里函数返回的值。 说明 新建类库工程 在visual studio中建立。 C# 代码 using...
0-1背包问题【穷举法+二维dp数组】
问题描述: 使用穷举法解决0/1背包问题。问题描述:给定n个重量为{w1, w2, … ,wn}、价值为{v1, v2, … ,vn} 的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,且要能够装到背包中。 穷举法:每件物品装还是…...
nodejs+vue+python+php基于微信小程序的在线学习平台设计与实现-计算机毕业设计
困扰管理层的许多问题当中,在线学习也是不敢忽视的一块。但是管理好在线学习又面临很多麻烦需要解决,例如:如何在工作琐碎,记录繁多的情况下将在线学习的当前情况反应给课程问题管理员决策,等等。 流,开发一个在线学习平台小程序一方面的可能会更合乎时宜,另一方面来…...
Spring学习笔记2 Spring的入门程序
Spring学习笔记1 启示录_biubiubiu0706的博客-CSDN博客 Spring官网地址:https://spring.io 进入github往下拉 用maven引入spring-context依赖 写spring的第一个程序 引入下面依赖,好比引入Spring的基本依赖 <dependency><groupId>org.springframework</groupId&…...
【Linux】虚拟机安装Linux、客户端工具及Linux常用命令(详细教程)
一、导言 1、引言 Linux是一个开源的操作系统内核,它最初由芬兰计算机科学家Linus Torvalds于1991年开发。Linux不同于传统的商业操作系统,它常用于服务器、嵌入式系统和个人电脑等各种平台。 Linux具有很多优点,包括稳定性、安全性和可定制…...
Day 47 动态规划 part13
Day 47 动态规划 part13 解题理解300674718 3道题目 300. 最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 解题理解 300 dp[i]被设置为以nums[i]为结尾的最长递增子序列长度。 class Solution:def lengthOfLIS(self, nums: List[int]) -> int:if len(nums) …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
