
位运算
文章平均质量分 55
seez
njfu
展开
-
P3694 邦邦的大合唱站队(集合类状压dp)
邦邦的大合唱站队 - 洛谷 关键:由于是线性安排的,通过枚举所有M的选择情况+最后一个不同点,可以达到枚举M的所有摆放顺序 分析:由于M的范围是1~20,所以想到用状压dp来做 由于按照出队后,出队的偶像可以归队到任意的空位中,且我们需要同一乐队的偶像连续站在一起 性质1:一队偶像安排到的位置可以是任意的,在他之前和之后的偶像都可以是任意的 因为位置可能是任意的,那么我们可以先从头开始安排,一直安排到尾。 因为我们是使用状压dp来做的,通过枚举所有 2^j (0<=j<...原创 2022-02-25 11:33:13 · 665 阅读 · 0 评论 -
codeforces 768 C (位运算,构造)
题意:运用一个性质,位运算的结果只与同一位有关 要我们构造出k,分为两种情况 1.k<=n-2 由于n-1是一个全为1的奇数,n-1与任何数相与都是这个数本身,所以要求这个数k的时候,只要让k和n-1配对,就可以了 2.k==n-1 这个情况比较复杂,我们知道只需要输出其中一种解决方案即可,n-1是一位全为1的奇数,可以拆开看为n-2(仅最后一个为0,其他位==1) + 1 那么我们要确保n-2能被输出,就只有n-1和他配对,然后1能被输出,最简单的就是1和2配对 对于不能输出的情况..原创 2022-01-29 00:43:53 · 328 阅读 · 0 评论 -
牛客寒假训练营 H 小沙的数数(二进制贪心,结论)
异或和 =a1 ^ a2 ^ a3 ... ^an 最大异或和 <=a1+a2+a3..+an 异或操作: a+b>=a^b+2*a&b 由于有这个数学公式,那么当且仅当a!=b的时候,a^b可以取到最大值 那么由于二进制运算是拆位的,每一位上都是独立运算的,也就是说 这一位上选什么都仅由 a数组中 每一个元素在该位的数字决定 异或和=m 如果想要异或和最大,就必须a数组任意两个相与为0,所以a数组该位上要么为0,要么为1 如果a数组某一位相加为1,那么有两种情况 ..原创 2022-01-29 00:01:14 · 717 阅读 · 0 评论 -
位运算操作
移位操作 左移:相当于*2 1<<n=2^n n<<1=2n 右移:相当于/2下取整 n>>1=n/2 例题:a^b a^b 64位整数乘法 二进制状态压缩 将长度为m的bool数组用一个m位的二进制整数表示并存储 操作 取出整数n在二进制表示下的第k位 (n>>k)&1 取出整数n在二进制表示下的后k位 n&((1<<k)-1) 把整数n在二进位表示下的第k位取反 n^(1<<k) 把整数n在二原创 2022-01-28 22:40:15 · 597 阅读 · 0 评论 -
998.起床困难综合症(位运算,贪心)
原题链接 题意:玩家的初始攻击力范围[0,m],求一个合理的初始攻击力获得的最大伤害值 分析:位运算的一个特点是二进制下不进位,x0可以任意选择的情况下,ans的第几位是1/0仅与x0的第几位是1/0有关,和其他的无关,所以我们可以依次枚举每一位是0和1的情况哪个比较好来进行选择 限制条件: 初始值的范围必须在[0,m]内 贪心的想,为了初始值范围在范围内,1,0结果都为1时,优先选择0 由于要求最大的伤害值,因为位运算不会进位,并且门的类型对答案也会有贡献,所以即使m很小,我们也要从2^29开始原创 2022-01-28 22:15:18 · 122 阅读 · 0 评论 -
最短Hamilton路径(集合类状压dp)
题目链接 分析: 旅行商问题是一个np完全问题,没有找到合适的算法对他进行优化,只能采用dfs暴力枚举 由于数据是1~20,所以肯定是会超时的,思考有没有办法进行合理的优化 我们发现,需要关注的状态只有: 当前所处的位置 当前哪些点被使用过 所以可以用记忆化搜索来实现,只需要记录当前的最小值 对于被使用过的点相同的,且目前所在位置相同,可以被看为是一个集合,我们只需要维护这个集合的最小值就可以了 原问题:遍历完n个点,且当前位置在n-1的最小花费 子问题:遍历完i个点,且当前...原创 2022-01-28 19:59:36 · 514 阅读 · 0 评论