状态压缩的意图是用每一位二进制表示一个状态,0表示选中状态,1表示不选状态,如果有N个物体,从中选择若干个物体,那么最终选中的状态可以用一个N位的二进制位来表示
比如
若选择了第1个物体和第3个物体,这种状态为
0...0101 //前面的0的个数为N-3
若选择了第2个物体,第3个物体,第N个物体,这种状态为
1...0110
因此,无论选中什么状态,都可以用一个N位的二进制数来表示,最大值为(1<<N )- 1 (全部选中)
那么,如果要记录每一个状态的信息(结构体),我们就可以用一个数组来表示,比如,我要记住选中若干物体的重量和价格,只要定义一个结构体
struct Node {
int weight;
double price;
};