您的位置:首页 > 其它

状态压缩DP------学习小记

2013-08-17 15:55 176 查看
  状态DP主要用的还是DP思想,顾名思义,加了一个状态,主要是用来求状态个数的。

  状态是用二进制数来表示的,也就是用0或1来表示,每一行有一个状态数,就是由这一行的0或1组成的,首先我们要获得每行的状态数。

for(int i=0;i<m;i++)
{
scanf("%d",&num);
if(num==1)    statue |= (1<<m);
}


  还要求满足要求的一些状态数,例如:两个方格的距离不小于2

bool ok(int x)
{
if(x&(x<<1))return false;
if(x&(x<<2))return false;
return true;
}


  可能还要计算一个状态数由几个1,这些都不难~

int getsum(int x)
{
int num=0;
while(x>0)
{
if(x&1)num++;
x>>=1;
}
return num;
}


  状态DP最主要的还是DP,上面这些都是求状态的一些代码,不是主要的。

  状态DP要求不同行之间的的状态数是否满足要求,因为状态DP用二进制来表示,所以位运算用的比较多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: