状态压缩DP
状态压缩动态规划,是动态规划中非常重要的一类,在动态规划问题中,我们为了表示某个状态,我们需要额外的信息,某些状态我们只需要线性地增加开辟的空间即可,但是某些问题却需要保存一个集合作为当前阶段的状态信息,为了减少对集合信息表示所造成空间和时间复杂度的浪费,我们这里可以用状态压缩的方式来降低空间复杂度;
所谓状态压缩就是用以为K进制的数来表示原始状态空间中一个维度上所有可能的结果,集合中有多少元素,就可以使用多少位的K进制元素来表示这个集合,这就是所谓的状态压缩。
例题
#include<bits/stdc++.h>
using namespace std;
bool legal[1<<11];
int n,m;
int lowbit(int x){
return x&(-x);
}
void init(){
if(m%2==0)legal[0]=true;
else legal[0]=false;
unordered_map<int,int> low;
for(int i=1;i<14;i+=2)low[1<<i]=1;
for(int i=1;i<(1<<m);i++){
bool tag=true;
//双指针
int pre=1;
for(int j=i<<1;j;j-