热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

二进制枚举算法

二进制:是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二

二进制:是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
子集:是一个数学概念:如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集。
含有N个元素的集合的一切子集的个数为 2^n。简单证明一下:
含有0个元素的子集有C(N,0)个,
含有1个元素的子集有C(N,1)个,
含有2个元素的子集有C(N,2)个,

含有N个元素的子集有C(N,N)个
由二项式系数的性质可得:C(N,0)+C(N,1)+C(N,2)+…+C(N,N)=2^n。


  1. 自学二进制枚举后自己理解

根据我自己的理解来说二进制枚举就是通过二进制只有0和1两个数值来表示其代表的值是否被我们选中。
所解决的问题:他所解决的问题就是已经告诉我们一个固定数量的值或数,并让我们来计算我们能有多少种不同的选择结果。

首先我吗来补充一波知识
按位与运算(&)
A&B(A,B表示十进制数)表示将A,B转换成十进制数进行比较,如:1&0=0;1&1=1;0&0=0;3&5=011&101=001;

移位运算符&#xff08;<<&#xff09;
A< 通常认为A<

接下来我们就来看一题题目来实战一下吧
锐锐有一个神奇的口袋&#xff0c;总的容积是40&#xff0c;用这个口袋可以变出一些物品&#xff0c;这些物品的总体积必须是40。锐锐现在有n个想要得到的物品&#xff0c;每个物品的体积分别是a1&#xff0c;a2……an。锐锐可以从这些物品中选择一些&#xff0c;如果选出的物体的总体积是40&#xff0c;那么利用这个神奇的口袋&#xff0c;锐锐就可以得到这些物品。现在的问题是&#xff0c;锐锐有多少种不同的选择物品的方式。
输入格式&#xff1a;输入的第一行是正整数n (1 <&#61; n <&#61; 20)&#xff0c;表示不同的物品的数目。接下来的n行&#xff0c;每行有一个1到40之间的正整数&#xff0c;分别给出a1&#xff0c;a2……an的值。
输出格式&#xff1a;输出不同的选择物品的方式的数目。
分析&#xff1a;假设输入为
3
20
20
20
那么那么我们就可以很容易的知道这最终输出的结果为3&#xff0c;因为a1,a2,a3都为20
那么此时因为有3个数那么用三位二进制数就可以表示相应的a1,a2,a3是否被选中。


a1a2
00

a3
0

因为这三个数据每个都有0或1两种状态&#xff0c;因此他就有7种转态来表示其不同的选择情况分别为&#xff1a;
a1 a2 a3
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
因此代码为&#xff1a;

#include
#include
using namespace std;
int main(){int number,arg[20],nu&#61;0,sum;scanf("%d",&number);for(int i &#61;0;i<number;i&#43;&#43;) scanf("%d",&arg[i]);//输入每个数值for(int i &#61; 0;i<(1<<number);i&#43;&#43;){//1<sum &#61; 0;for(int j &#61; 0;j<number;j&#43;&#43;)if(i&(1<<j)) sum &#61; sum &#43;arg[j];//这里i&&#xff08;1<if(sum&#61;&#61;40) nu&#43;&#43;;}cout<<nu<<endl;return 0;}

新人第一次写博客&#xff0c;如果有什么错误或不足的地方希望大家指正


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 本文通过C++语言实现了一个递归算法,用于解析并计算数学表达式的值。该算法能够处理加法、减法、乘法和除法操作。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • OpenCV中的霍夫圆检测技术解析
    本文详细介绍了如何使用OpenCV库中的HoughCircles函数实现霍夫圆检测,并提供了具体的代码示例及参数解释。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文将深入探讨C语言中的位操作符——按位与(&)、按位或(|)和按位异或(^),通过具体示例解释这些操作符如何在位级别上对数据进行操作。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本问题涉及在给定的无向图中寻找一个至少包含三个节点的环,该环上的节点不重复,并且环上所有边的长度之和最小。目标是找到并输出这个最小环的具体方案。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
author-avatar
mobiledu2502921883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有