zoukankan      html  css  js  c++  java
  • 状态压缩DP------学习小记

      状态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用二进制来表示,所以位运算用的比较多。

  • 相关阅读:
    如何理解联合文件系统?
    Docker 学习笔记(一)
    Bzoj 3124: [Sdoi2013]直径 题解
    Bzoj 3131 [Sdoi2013]淘金 题解
    欧拉路(题目)
    硬币问题
    线段树、树状数组
    Splay树、Treap树
    模拟退火
    广搜题目(一本通)
  • 原文地址:https://www.cnblogs.com/yongren1zu/p/3264683.html
Copyright © 2011-2022 走看看