写在前面:大家好!我是ACfun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。这篇博客来详解一下递归实现指数型枚举。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

文章目录

  • 题目信息
    • 题目描述
    • 输入格式
    • 输出格式
    • 数据范围
    • 输入样例
    • 输出样例
  • 题解
    • 解题思路
    • 解题代码

原题链接: 递归实现指数型枚举

题目信息

题目描述

 从 1~nn 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

 输入一个整数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,感谢大家的支持!

递归实现指数型枚举(递归)相关推荐

  1. 19071 递归实现指数型枚举

    Description 递归实现指数型枚举是一种常用的DFS算法,复杂度是2^n,只能在n比较小的时候使用. 一般用于:从 1∼n 这 n 个整数中随机选取(或者有某些规则限制)任意多个,输出所有可能 ...

  2. [位运算][递归] 递归实现指数型枚举

    递归实现指数型枚举 从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数n. 输出格式 每行输出一种方案. 同一行内的数必须升序排列,相邻两个数用恰好1个空格 ...

  3. 《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs

    文章目录 题目解答 题目链接 题目解答 分析: 优化:用二进制状态压缩,也就是用二进制上的位来记录数有没有被用过. ac代码 #include<bits/stdc++.h> using n ...

  4. 递归实现指数型枚举(搜索)

    题目链接 AcWing 92. 代码: #include <bits/stdc++.h>using namespace std;int main() {std::ios::sync_wit ...

  5. 92. 递归实现指数型枚举

  6. SCAU华南农业大学数据结构19071 递归实现指数型枚举

    按照图片提示的算法来打就行了. #include <iostream> using namespace std;int n,a[10],sum=0,cur=1;void dfs( int ...

  7. 【蓝桥杯试题】 递归实现指数型枚举例题

  8. 递归实现指数型,排列型,组合型枚举

    目录 递归实现指数型枚举 递归实现排列型枚举 递归实现组合型枚举 递归实现指数型枚举  题目 从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n ...

  9. 递归实现指数型、排列型和组合型枚举

    1.递归实现指数型枚举 从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n. 输出格式 每行输出一种方案. 同一行内的数必须升序排列,相邻两个数用恰好 ...

  10. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

最新文章

  1. enspar启动失败40_负债80万开始爆仓,快40岁的人了没钱创业,精神恍惚该怎么翻身?...
  2. 在SQL SERVER中使用分布式事务
  3. UA MATH523A 实分析3 积分理论例题 Fubini定理计算重积分的极限
  4. 防屏蔽浏览器_彻底解决安卓手机通知管理难题,顺便还实现了聊天消息防撤回!...
  5. pcb中layer stack manager 中,右上角的layer pairs 、internal layer pairs和build-up,三者的区别?
  6. mysql 左连接 重复_mysql左连接重复行
  7. 关于kafka中acks是否可以为all
  8. Python3之logging输出写入日志
  9. 2021Q1美妆行业季度观察报告
  10. flink 任务执行类的加载
  11. #includealgorithm里的函数
  12. 基于FPGA的跨时钟域信号处理——专用握手信号
  13. JAVA并发编程实践-中文-高清-带书签-完整版
  14. Nexus下载、安装与使用
  15. 简历制作器App使用条款
  16. 小妲己智能机器人要连接wifi吗_ZIB智伴机器人可以连WiFi吗 ZIB智伴机器人连接WiFi方法...
  17. 计算机建模和仿真实训报告,cad与cam实训报告范文3篇
  18. SHAP:解释模型预测的通用方法
  19. Flink CDC 新一代数据集成框架
  20. 【色彩管理】HSB色彩模式详解

热门文章

  1. 凯叔讲故事显示未能连接到服务器,凯叔讲故事(免费收听)
  2. 8g内存一般占用多少_你到底需要多大内存?4G、8G还是16G
  3. 通过telnet命令使用SMTP、POP3协议收发邮件(以QQ邮箱为例)
  4. ES3,ES5,ES6的区别
  5. 如何使用SPSS列联表分析,查看变量间的相关关系(上)
  6. arcgis 去除影像黑色边框(nodata)
  7. Ubuntu 18.04 究极美化教程
  8. ubuntu系统打不开网易云音乐解决办法。
  9. Fibonacci数列的递推C语言详解:Fn=Fn-1+Fn-2
  10. @Modifying 注解