热门标签 | 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;如果有什么错误或不足的地方希望大家指正


推荐阅读
  • 在HDU 1166敌军布阵问题中,通过运用线段树数据结构,可以高效地计算指定区间的敌军数量。该算法不仅能够在限定的时间和内存条件下快速求解,还能够灵活应对动态变化的战场局势,为实时决策提供支持。 ... [详细]
  • HDU1176:免费馅饼问题的动态规划解法分析
    题目“免费馅饼”通过动态规划方法进行了解析。该问题的时间限制为 Java 2000ms 和其他语言 1000ms,内存限制为 Java 65536K 和其他语言 32768K。本文详细探讨了如何利用动态规划算法高效求解此问题,并对算法的时间复杂度和空间复杂度进行了深入分析。此外,还提供了具体的实现步骤和代码示例,帮助读者更好地理解和应用这一方法。 ... [详细]
  • 本文详细解析了九度编程平台上的斐波那契数列高效算法挑战(题目编号:1387)。该挑战要求在1秒的时间限制和32兆的内存限制下,设计出高效的斐波那契数列计算方法。通过多种算法的对比和性能分析,本文提供了优化方案,帮助参赛者在限定资源条件下实现高效计算。 ... [详细]
  • 哈希表(Hash Table)是一种高效的查找算法,与传统的链表和树结构相比,其在查找过程中无需进行逐个元素的比较。本文将深入探讨哈希表的基本原理、应用场景以及优化策略,帮助读者全面理解其在实际开发中的优势和局限性。通过实例分析和代码示例,我们将展示如何有效利用哈希表提高数据处理效率,并解决常见的冲突问题。 ... [详细]
  • 题目链接:http://codeforces.com/gym/101190/attachments题意:在一个共享三轮车站点,某些用户需要租用车辆。该问题涉及如何通过离线查询和排序优化策略来高效地管理和分配车辆资源。具体来说,需要设计一种算法,在满足所有用户需求的同时,最小化总等待时间和资源浪费。通过合理的数据结构和算法优化,可以显著提高系统的整体性能和用户体验。 ... [详细]
  • 在SWUSTOJ #1063中,题目要求对带权重的有向图进行算法计算与分析。假设图G使用邻接矩阵存储,任务是计算图中的最大权值和最小权值,并确定对应的有向边。输入数据的第一行包含一个整数n,表示图中节点的数量。随后的输入将提供图的边及其权重信息。通过该算法,可以有效地找出图中的关键路径和最短路径,为图论问题的解决提供重要参考。 ... [详细]
  • 开发心得:成为SGU475智能筏工的策略与技巧 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 本程序通过用户输入的三个数值来判断这些边长是否能构成一个有效的三角形。程序首先接收用户输入的三条边长,然后利用三角形不等式原理进行验证,确保任意两边之和大于第三边。如果条件满足,则输出确认信息;否则,提示用户输入的边长无法构成三角形。此外,程序还计算并输出三角形的周长和面积,以提供更多的几何信息。 ... [详细]
  • 本文探讨了在形状类族中应用纯虚函数的设计模式及其解析方法。通过定义一个基类 `Shape`,其中包含一个纯虚函数 `area()`,实现了多态性和代码的灵活性。该设计使得派生类能够根据具体的形状计算面积,从而提高了代码的可扩展性和复用性。示例代码展示了如何利用纯虚函数实现这一机制。 ... [详细]
  • 针对NOJ1102黑白图像问题,本文采用深度优先搜索算法进行详细分析与实现。该问题要求在给定的时间限制(普通Java为1000-3000毫秒)和内存限制(65536KByte)内,处理一个n×n的黑白图像。通过对图像的逐像素遍历,利用深度优先搜索算法有效地识别并标记相连的黑色区域,从而实现图像的高效处理。实验结果显示,该方法在多种测试用例中均能稳定达到预期效果,具有较高的准确性和效率。 ... [详细]
  • 求助高手调试程序,非常感谢您的支持!在编写C语言程序时遇到了一些问题,具体代码如下:```c#include #include #include #define MAX 50int t;```希望有经验的开发者能提供指导,帮助解决调试中的难题。感谢您的时间和帮助! ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
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社区 版权所有