状态压缩(状压dp)
注:在涉及到位运算时,一定要注意位运算的优先级。该加的括号一定要加
定义状态(例如) 求每一种放法的背包价值,状态应该是这n件物品的放与不放的情况。
最容易想到的是开个n维数组,第i个维度的下标如果是1的话代表放第i件物品,0的话代表不放第i件物品;
但是这样很容易造成空间浪费,而且多维数组也不好开;
我们仔细观察就会发现,每件物品有放与不放两种选择;假设我们有5件物品的时候,用1和0代表放和不放
如果这5件物品都不放的话,那就是00000;
如果这5件物品都放的话, 那就是11111;
看到这,我们知道可以用二进制表示所有物品的放与不放的情况;如果这些二进制用十进制表示的话就只有一个维度了。而且这一个维度能表示所有物品放与不放的情况;这个过程就叫做状态压缩;
状态压缩
状压dp
练习题(正在更新)
车
车||
炮兵阵地