状压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$。

 

(金涛的神图)

 二、心路李辰

当我们发现实在难以转移/复杂度爆炸(如互不侵犯炮兵阵地)的时候,考虑预处理一些东西来帮助我们。

posted @ 2018-09-20 19:35  cellur925&Chemist  阅读(151)  评论(0编辑  收藏  举报