状态压缩动态规划

状态压缩动态规划

维护一个集合的状态,常常用 int 或 bool 类型的数组进行表达与描述。如果这个集合包含的元素个数很少,就把描述集合状态的数组压缩到一个整数中,这种 用一个整数来描述一个集合的方法就叫作“状态压缩”。而当状态的某个维度存储的是一个集合的状态,这类问题就称作:状态压缩动态规划。

如果集合中每个元素的状态只有两种,一般用 1 和 0 进行描述,那么用一个整数对应的二进制位来表示集合中元素的状态。(如果状态有三种就采用三进制)

比如整数 23,它所对应的的二进制数为 10111,那么就可以认为这个集合中包含了第 1、2、3、5 这些元素,而不包括第 4 个元素。

// 判断一个数字 mask 二进制第 i 位是否为 1 (从右边开始)
// 即:第 i 个元素是否选择
(mask & 1 << i) > 0
(mask >>

你可能感兴趣的:(常用算法,算法,数据结构)