状压dp小结 By cellur925
会一直慢慢写的...
一、一些技巧(位运算)
- 取出整数n在二进制表示下的第k位,检验是否为1---(n>>k)&1
- 求最后完备状态(假设都是1),有n个待枚举状态,结果是(1<<n)-1
- 要只取i这一位是1,其他都是0,那么(1<<(i-1))
- 1<<n=2^n n<<1=2n
- 之前的状态(异或的使用)见这
- (虽然这个标题是状压dp)图论中双向边可以编号从2开始(初始tot=1),然后i^1就可以得到反向边的位置。
- 为了迁就位运算,可以把序号编成0~n-1,这样会方便许多。
- 将一个用01串(字符数组读入)转成它的十进制表示形式:
for(int i=1;i<=n;++i) if(a[i]=='1') s|=1<<(n-i);
- 去掉最后一位:$x>>1$。
- 在最后加一个0:$x<<1$。
(金涛的神图)
二、心路李辰
当我们发现实在难以转移/复杂度爆炸(如互不侵犯炮兵阵地)的时候,考虑预处理一些东西来帮助我们。
独立意志与自由思想是必须争的,且须以生死力争。