赞
踩
状压DP 又叫集合动态规划。是以结合信息为状态的特殊的动态规划的问题。主要有传统集合动态规划和基于连通性状态压缩的动态规划两种。
一般的DP:着眼于整体,从中提取出几个关键信息并以此划分阶段使得问题具备无后效性或最优子性质,然后根据已知的信息依次对各个阶段进行决策。 状压DP:如果一般的状态难以描述无后效性原则,或者信息不足无法决策,许多元素的状态都直接影响的决策,都需要被考虑到。所以给每个元素都开个数组来存是行不通的。于是状压DP应运而生,它可以对多个元素的状态进行压缩存储。
位运算是一种速度非常快的基本运算。有很多种操作
算数左移(<<):左移一位,相当于该数乘以 2 x 2^x 2x 算数右移(>>):右移一位,相当于该数除以 2 x 2^x 2x
与运算(&):两数同一位都为 1 1 1时结果为 1 1 1,否则为 0 0 0。或运算(|):两数同一位都为 0 0 0时结果为 0 0 0,否则为 1 1 1。
非运算(~):按位取反。例如~101=010
二进制状态压缩,是指将一个长度为 m m m的 b o o l bool bool数组用一个 m m m位 2 2 2进制整数表示并存储的方法。利用下列位运算操作可以实现原 b o o l bool bool数组中对应下标元素的存取。(注意,为了不让优先级混乱,所以建议所有长运算都加括号)
| 取出整数 n n n在二进制表示下的第 k k k位 | ( n > > k ) & 1 (n>>k)~~\&~~1 (n>>k) & 1 |
|---|---|
| 取出整数 n n n在二进制表示下的第 0 0 0至 k − 1 k-1 k−1位 | n & ( ( 1 < < k ) − 1 ) n\&((1<<k)-1) n&((1<<k)−1) |
| 把整数 n n n在二进制表示下的第 k k k位取反 | n x o r ( 1 < < k ) n ~ xor ~(1<<k) n xor (1<<k) |
| 对整数 n n n在二进制表示下的第 k k k位赋值 1 1 1 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。