递归实现指数型枚举(递归)
写在前面:大家好!我是
ACfun
,我的昵称来自两个单词Accepted
和fun
。我是一个热爱ACM的蒟蒻。这篇博客来详解一下递归实现指数型枚举。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง
文章目录
- 题目信息
- 题目描述
- 输入格式
- 输出格式
- 数据范围
- 输入样例
- 输出样例
- 题解
- 解题思路
- 解题代码
原题链接: 递归实现指数型枚举
题目信息
题目描述
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数n。
输出格式
每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
数据范围
1 ≤ n ≤ 15
输入样例
3
输出样例
3
2
2 3
1
1 3
1 2
1 2 3
题解
解题思路
我们可以从 1 ~ n
依次考虑每个数选还是不选,我们可以以一个树的形式来描述选还是不选的情况。对于每一种情况有三种状态可以选择:待考虑、选、不选
。我们以 0
表示待考虑,1
表示选该位,2
表示不选。比如当 n = 3
的时候,我们画出的递归搜索树如下:
这其实就是一个 深度优先搜索
的过程,我们先考虑第一位,第一位有两种情况:左子树为不选第一位的情况,右子树为选第一位的情况;当不选第一位时又分成了两种情况,即在不选第一位的情况下第二位不选的情况(左子树)和第二位选的情况(右子树);然后又分成两种情况,选择第三位和不选择第三位。以上是整个左子树的分析情况,即刚开始第一位不选的情况。右子树第一位选择的情况下同理。
所以我们可以使用 dfs
来递归遍历所有的情况,首先递归遍历不选的情况,然后再递归遍历选择的情况。当每层递归到结束时依次遍历我们记录每个点的状态,如果是 1
我们就输出该数,否则就不输出该数。
解题代码
#include<iostream>
#include<cstdio>
using namespace std;const int N = 15;int n;
int s[N]; // 用来记录每个点的状态: 0 表示待考虑,1 表示选择该数, 2 表示不选void dfs(int x) {if (x == n) {for (int i = 0; i <= n; i++) {if (s[i] == 1) {printf("%d ", i + 1);}}printf("\n");return;}s[x] = 2;dfs(x + 1); // 第一个分支,不选s[x] = 0; // 恢复现场s[x] = 1;dfs(x + 1); // 第二个分支,选s[x] = 0;
}int main() {cin >> n;dfs(0); // 从第一个开始遍历return 0;
}
我是ACfun,感谢大家的支持!
递归实现指数型枚举(递归)相关推荐
- 19071 递归实现指数型枚举
Description 递归实现指数型枚举是一种常用的DFS算法,复杂度是2^n,只能在n比较小的时候使用. 一般用于:从 1∼n 这 n 个整数中随机选取(或者有某些规则限制)任意多个,输出所有可能 ...
- [位运算][递归] 递归实现指数型枚举
递归实现指数型枚举 从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数n. 输出格式 每行输出一种方案. 同一行内的数必须升序排列,相邻两个数用恰好1个空格 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs
文章目录 题目解答 题目链接 题目解答 分析: 优化:用二进制状态压缩,也就是用二进制上的位来记录数有没有被用过. ac代码 #include<bits/stdc++.h> using n ...
- 递归实现指数型枚举(搜索)
题目链接 AcWing 92. 代码: #include <bits/stdc++.h>using namespace std;int main() {std::ios::sync_wit ...
- 92. 递归实现指数型枚举
- SCAU华南农业大学数据结构19071 递归实现指数型枚举
按照图片提示的算法来打就行了. #include <iostream> using namespace std;int n,a[10],sum=0,cur=1;void dfs( int ...
- 【蓝桥杯试题】 递归实现指数型枚举例题
- 递归实现指数型,排列型,组合型枚举
目录 递归实现指数型枚举 递归实现排列型枚举 递归实现组合型枚举 递归实现指数型枚举 题目 从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n ...
- 递归实现指数型、排列型和组合型枚举
1.递归实现指数型枚举 从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n. 输出格式 每行输出一种方案. 同一行内的数必须升序排列,相邻两个数用恰好 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩
文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...
最新文章
- enspar启动失败40_负债80万开始爆仓,快40岁的人了没钱创业,精神恍惚该怎么翻身?...
- 在SQL SERVER中使用分布式事务
- UA MATH523A 实分析3 积分理论例题 Fubini定理计算重积分的极限
- 防屏蔽浏览器_彻底解决安卓手机通知管理难题,顺便还实现了聊天消息防撤回!...
- pcb中layer stack manager 中,右上角的layer pairs 、internal layer pairs和build-up,三者的区别?
- mysql 左连接 重复_mysql左连接重复行
- 关于kafka中acks是否可以为all
- Python3之logging输出写入日志
- 2021Q1美妆行业季度观察报告
- flink 任务执行类的加载
- #includealgorithm里的函数
- 基于FPGA的跨时钟域信号处理——专用握手信号
- JAVA并发编程实践-中文-高清-带书签-完整版
- Nexus下载、安装与使用
- 简历制作器App使用条款
- 小妲己智能机器人要连接wifi吗_ZIB智伴机器人可以连WiFi吗 ZIB智伴机器人连接WiFi方法...
- 计算机建模和仿真实训报告,cad与cam实训报告范文3篇
- SHAP:解释模型预测的通用方法
- Flink CDC 新一代数据集成框架
- 【色彩管理】HSB色彩模式详解
热门文章
- 凯叔讲故事显示未能连接到服务器,凯叔讲故事(免费收听)
- 8g内存一般占用多少_你到底需要多大内存?4G、8G还是16G
- 通过telnet命令使用SMTP、POP3协议收发邮件(以QQ邮箱为例)
- ES3,ES5,ES6的区别
- 如何使用SPSS列联表分析,查看变量间的相关关系(上)
- arcgis 去除影像黑色边框(nodata)
- Ubuntu 18.04 究极美化教程
- ubuntu系统打不开网易云音乐解决办法。
- Fibonacci数列的递推C语言详解:Fn=Fn-1+Fn-2
- @Modifying 注解