二进制枚举

简介: 二进制枚举

二进制枚举利用的是二进制下n位长度的数有2 ^ n个,一个有n个元素的集合子集个数也为2 ^ n个,所以可以利用二进制的1,0和集合中的元素联系起来他可以实现组合也可以实现容斥

对一个二进制来说1代表取这个元素0代表不取这个元素,1和0所在的位置代表元素的位置

举个例子

如集合{a,b,c,d,e}

当二进制00000就代表什么都不取, 10000代表取a,01000代表取b,11000代 表取a,b,如此,所以我们需要枚举的数量就是00000到11111,也就是0到1<<n位,<<代表左移操作,即乘2。


题目:


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


输入格式


输入一个整数 n。


输出格式


每行输出一种方案。


同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。


对于没有选任何数的方案,输出空行。


本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。


数据范围


1≤n≤15


输入样例:


3


输出样例:


1. 
2. 3
3. 2
4. 2 3
5. 1
6. 1 3
7. 1 2
8. 1 2 3
//AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n;
  cin>>n;
  for(int i=0;i<1<<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      if(i>>j&1)
      cout<<j+1<<" ";
    }
    cout<<endl;
  }
  return 0;
}


开始第一个循环的(1<<n)实际上是枚举出n个数每一个的取和不取的情况,每一个数取和不取用1位二进制表示,0表示不取.表示取,然后n个数取和不取的情况就需要长度为n的一个01串表示。他们取和不取的情况,第二个for循环是根据第一个循环枚举的01串的长度来对这次枚举的01串各个位上是否为1(也就是是否取这个数)进行判断1<<就是得到某一个01串上只有个位置为1的一个数这个数和你第一次循环枚举的进行&操作(根据&操作相同01串的位上同为1得到的才为1如果枚举的这个01串上该位不为1那么(1<<得0为0也就是不取的情况不进

入语句)然后这个第二个for循环就可以判断出枚举到这个01串哪些位置上为1(就是取哪些数)


目录
相关文章
|
机器学习/深度学习 传感器 编解码
首篇!BEV-Locator:多目端到端视觉语义定位网络(清华&轻舟智航)(下)
准确的定位能力是自动驾驶的基础。传统的视觉定位框架通过几何模型来解决语义地图匹配问题,几何模型依赖于复杂的参数调整,从而阻碍了大规模部署。本文提出了BEV定位器:一种使用多目相机图像的端到端视觉语义定位神经网络。具体地,视觉BEV(鸟瞰图)编码器提取多目图像并将其展平到BEV空间中。而语义地图特征在结构上嵌入为地图查询序列。然后,cross-model transformer将BEV特征和语义图查询关联起来。通过交叉注意力模块递归地查询自车的定位信息。最后,可以通过解码transformer输出来推断自车位姿。论文在大规模nuScenes和Qcraft数据集中评估了所提出的方法。
首篇!BEV-Locator:多目端到端视觉语义定位网络(清华&轻舟智航)(下)
|
5月前
|
传感器 数据格式
【STM32】DHT11温湿度模块传感器详解&代码
【STM32】DHT11温湿度模块传感器详解&代码
|
6月前
|
存储 算法 编译器
【C++ 函数 基础教程 第四篇】深入C++函数返回值:理解并优化其性能
【C++ 函数 基础教程 第四篇】深入C++函数返回值:理解并优化其性能
482 1
|
6月前
|
安全 计算机视觉 Python
【已解决】attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘
【已解决】attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘
|
存储 算法 API
stm32cubeMX学习、SD卡虚拟U盘实验
stm32cubeMX学习、SD卡虚拟U盘实验
417 0
|
XML 前端开发 JavaScript
Web的工作原理是怎样的?底层原理是什么?
Web的工作原理是怎样的?底层原理是什么?
576 0
|
机器学习/深度学习 人工智能 JSON
LangChain + ChatGLM2-6B 搭建个人专属知识库
之前教过大家利用 langchain + ChatGLM-6B 实现个人专属知识库,非常简单易上手。最近,智谱 AI 研发团队又推出了 ChatGLM 系列的新模型 ChatGLM2-6B,是开源中英双语对话模型 ChatGLM-6B 的第二代版本,性能更强悍。 树先生之所以现在才更新 ChatGLM2-6B 知识库教程,是想等模型本身再多迭代几个版本,不至于刚出的教程很快不适配,或者项目本身一堆 bug,那样大家使用体验也不好。
2727 3
|
机器学习/深度学习 编解码 算法
自动驾驶:BEVDet
自动驾驶:BEVDet
657 0
自动驾驶:BEVDet
|
存储 机器学习/深度学习 算法
3.6双端口RAM和多模块存储器
3.6双端口RAM和多模块存储器
468 1
3.6双端口RAM和多模块存储器
|
存储 算法
编译原理 实验三 LL(1)分析法(LL1分析表的自动生成)
编译原理 实验三 LL(1)分析法(LL1分析表的自动生成)
869 0
编译原理 实验三 LL(1)分析法(LL1分析表的自动生成)