基础状压dp知识预备---较复杂的位运算

状压dp,也叫hashdp。主要指的是用某种量来描述某个状态的一种方式,而在简单常见的状态压缩过程中,我们往往会使用二进制来完成这一过程,所以位运算的熟练掌握就成了学习状压dp前最重要的一步了。
下面我们先介绍五种最基本的位运算操作,使用这些操作我们可以对01串进行多种变化
• << 左移
• >> 右移
• | 或
• & 和
• ^ 异或——两个值相同为0,不同为真

位运算的简单运用
• 去掉最后一位 x >> 1
• 在最后加一个0 x << 1
• 在最后加一个1 (x<< 1)+1
• 把最后一位变成1 x | 1
• 把最后一位变成0 (x | 1) - 1
• 最后一位取反 x ^ 1
• 把右数第k位变成1 x | (1 << (k-1))
• 把右数第k位变成0 x & (~ (1 << (k-1)))
• 右数第k位取反 x ^(1 << (k-1))
• 取末k位 x & ((1<<k)-1)
• 取右数第k位 (x >> (k-1)) & 1
• 把末k位变成1 x | ((1 << k)-1)
• 末k位取反 x ^ ((1 << k)-1)
• 把右边连续的1变成0 (x & (x+1))
• 把右起第一个0变成1 x | (x+1)
• 把右边连续的0变成1 x | (x-1)
• 取右边连续的1 (x ^ (x+1)) >> 1
• 去掉右起第一个1的左边 x&(-x)
熟练掌握上述位运算的技巧,可以帮助我们在实现状态转移的过程中节约很多时间,并且有利于精简代码。所以在用二进制表示状态压缩的题目中,我们需要熟练使用这些为位运算的技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值