首页 > 其他分享 >AcWing 92. 递归实现指数型枚举

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

时间:2024-12-06 20:30:39浏览次数:4  
标签:右移 数字 int 左移 state 二进制 枚举 92 AcWing

文章目录

前言

简单题只有那么一些,后面的稍微难一点点的题,自己写一道可能就要一个小时。现在不写之后需要的时候可能就来不及了。好吧。种一棵树最好的时间是十年前,对,假设我十年之前是信息竞赛选手,把这些题刷得非常熟练,现在可能就不需要写这些算法题了,但是肯定有其他问题要去做,所以现在努努力也不错。哈哈。不错不错。。。呜呜呜。

代码

#include<bits/stdc++.h>
using namespace std;
int n;
void dfs(int u,int state){
    if(u==n){
        for(int i=0;i<n;i++){
            if(state>>i&1){
                cout<<i+1<<' ';
            }
        }
        cout<<endl;
        return;
    }
    dfs(u+1,state);
    dfs(u+1,state|1<<u);
}
int main(){
    cin>>n;
    dfs(0,0);
    return 0;
}

思路

数据范围比较小,就直接指数级别的做法就可以。二叉树这种感觉一般都是指数级别的做法,这里是一个深搜。另外这里代码里面有一些位运算。我之前查过好多次,现在又忘了,有点难受了。浅析位运算符(左移、右移、与、或、异或)。看一下这个博客复习一下位运算的知识。只能算复习吗哈哈哈。

奥对,之前简单记的就是右移就是除以 2 的若干次方,左移就是乘以 2 的若干次方。但是有一个问题,就是可能出现什么符号位改变之类的情况,我暂时不想深入研究。数字是转换成二进制之后进行移位操作的。左移和右移就是字面的意思,比较直观。& 符号,只有全真才是真,也就是说只有 1&1 才是 1,具体到上面那份代码里面就是两个数字都是 1 的时候才表示选择了这个数字,右移 i 位表示的是把第 i 位数字移动到个位,注意这里是二进制的数字,其实就是用二进制的数字表示布尔数组,看选不选该位数字,写的比较简单了,好像是什么状态压缩还是啥,好像是叫二进制压缩。题解里面说是状态压缩递归。具体叫啥我不是很感兴趣哈哈。所以这里的状态的数字的位数和十进制数字不太一样,奥也不是,十进制是从左边往右边,从大到小,但是这里是从右边到左边,从小到大。别人的注解。奥,那我前面理解错了,这里的 state 表示的是 u 这个数字选不选,选的话做相应的改变。

| 这个只要有一个 1 ,表达式就全是 1 ,也比较好理解,关键是这个:左移的优先级比 | 的优先级高。1<<u 表示的是让 u 这一位变成 1 ,具体的例子可能好理解一些。假设二进制数字是 8 位数,然后最开始 state=1000 0000 ,这里写成的是二进制的形式,方便理解,在代码里面其实是十进制数字。然后假设 u=3 ,那么 1<<3 其实就是 0000 1000 ,然后 0000 1000 | 1000 0000=1000 1000 ,表示选这一位,但是有点奇怪,因为我们选的 u==3 ,但是这个改变的好像是从右边往左边数 3 位。嗷嗷,前面 state>>i&1 也是从右边往左边数来看的,那就懂了。

比如说 0000 0011 ,表示选前面两个数,1100 0000 表示选最后面两个数,应该是这样。位运算还是有点炫技了。好难。

标签:右移,数字,int,左移,state,二进制,枚举,92,AcWing
From: https://blog.csdn.net/L3102250566/article/details/144200253

相关文章

  • AbMole| Fenoterol 非诺特罗(CAS号13392-18-2;目录号M9329)
    Fenoterol是一种选择性的,具有口服活性β2-肾上腺素受体(β2-adrenoceptor)激动剂。Fenoterol具有支气管扩张活性,可用于与哮喘,支气管炎和其他阻塞性气道疾病相关的支气管痉挛的研究。生物活性Fenoterol是一种选择性的,具有口服活性β2-肾上腺素受体(β2-adrenoceptor)......
  • SEMCMS存在SQL注入漏洞(CNVD-2024-39254、CVE-2024-46103)
    SEMCMS外贸网站系统一套开源外贸企业网站管理系统,有ASP和PHP两个版本(是为数不多的ASP系统,点个赞!),支持多种语言,主要用于外贸企业,因其功能强大,操作使用简单,拥有大量用户。 国家信息安全漏洞共享平台于2024-09-26公布其存在跨站脚本漏洞。漏洞编号:CNVD-2024-39254、CVE-2024-46103......
  • P6192 【模板】最小斯坦纳树
    题目描述:题目给定一张图上的几个关键点,要求我们用最小的边权将这些点连起来不难发现,最后连出来的答案一定是一棵树:如果有环的话,将环优化掉一定更好我们考虑dp:对于一个节点x钦定它是这颗树的根。记dp[rt][s]表示以rt为根,关键点被链接的状态为s时的最小花费则在最短路中......
  • 洛谷题单指南-线段树-P6492 [COCI2010-2011#6] STEP
    原题链接:https://www.luogu.com.cn/problem/P6492题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。解题思路:序列支持单点修改(0->1,1->0),区间查询(最长不连续0、1长度),因此可以采用线段树,不需要懒标......
  • 123-中兴B860AV1.1-4G/8G内存-晨星MSO9280芯片-安卓4.4.4-TTL刷机包
    在智能设备的使用中,有时候我们希望通过刷机来解锁更多功能或者提升设备性能。今天就给大家带来中兴B860AV1.1机顶盒(4G和8G版)的刷机固件升级教程。一、刷机准备(一)硬件准备一条TTL线(CH340G,需根据自己系统版本找店家要对应驱动)。用于连接电脑和机顶盒进行操作的工具。(二)软......
  • 92. 反转链表 II
    链接:92.反转链表II-力扣(LeetCode)方法一:需要分类讨论/*总体思路就是:pleft指向left所在的节点pright指向right所在的节点beforeleft指向left的前一个节点,或者叫做前面没有反转部分的尾节点behindright指向right的后一个节点,或者叫做后面没有反转部分......
  • 「C学习」枚举,共用体
    1.枚举①用户自定义的数据类型,用于定义一组命名的整型(eg.纯数据)常量。②限定变量的取值范围→可读性强的宏定义,枚举中定义的可以直接用,不用再次定义定义枚举变量(eg.X)①enumX;②enumColor{  RED,GREEN,BLUE}X;注意:X只能定义为设定好的特殊值(比如说,②中......
  • KIOXIA CD8 CM7系列企业级SSD区别在哪里?KCD81RUG1T92 KCMY1RUG1T92 PM9A3
    我们来看一下,KIOXIACD8系列、CM7系列和三星PM9A3系列,U.2接口的参数介绍产品型号KCD81RUG1T92KCMY1RUG1T92MZQL21T9HCJR-00A07品牌铠侠铠侠三星系列CD8-RCM7-RPM9A3容量1,920GB1,920GB1,920GB尺寸2.5-inch,15mmthickness2.5-inch2.5-inch,15mmthickness接口U.2U.2/U.3*......
  • 7-192 浪漫的表白
    有一个帅小伙一直暗恋一个女孩,但他还是没有勇气向她表白“我爱你”,更别说“某某某,我爱你,如果非要在这份‘爱’上加一个期限的话,那就是一万年”这类肉麻的话,生怕说了后会是“落花有意流水无情”,连朋友都无法做。不过,在经过一阵思想斗争以后,最后终于还是鼓起勇气向那个女孩进行了......
  • Acwing1696. 困牛排序
    题意给定一个n个数的排列,每次操作将第一个数插入到任意数之后,求多少次操作后排列为升序若\(a_i>a_{i+1}\)那么至少操作i次才能将a_i插入到\(a_{i+1}\)之后这时我们思考是否可以通过i次操作,使得序列有序,假如此时\(a_{i+1~n}\)有序于是我们可以通过插入排序,使得序列有序如何......