状态压缩(状压dp)

状态压缩(状压dp)

状态压缩(状压dp)_第1张图片

状态压缩(状压dp)_第2张图片

状态压缩(状压dp)_第3张图片

注:在涉及到位运算时,一定要注意位运算的优先级。该加的括号一定要加

定义状态(例如) 求每一种放法的背包价值,状态应该是这n件物品的放与不放的情况。

最容易想到的是开个n维数组,第i个维度的下标如果是1的话代表放第i件物品,0的话代表不放第i件物品;

但是这样很容易造成空间浪费,而且多维数组也不好开;

我们仔细观察就会发现,每件物品有放与不放两种选择;假设我们有5件物品的时候,用1和0代表放和不放

如果这5件物品都不放的话,那就是00000;
如果这5件物品都放的话, 那就是11111;

看到这,我们知道可以用二进制表示所有物品的放与不放的情况;如果这些二进制用十进制表示的话就只有一个维度了。而且这一个维度能表示所有物品放与不放的情况;这个过程就叫做状态压缩;

状态压缩

状压dp

练习题(正在更新)

谢谢

你可能感兴趣的:(状压dp)