• 状态压缩


    hiho1049 入门题

    题目链接

    #include <set>
    #include <map>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <string>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    
    #define MAX(a,b) ((a)>=(b)?(a):(b))
    #define MIN(a,b) ((a)<=(b)?(a):(b))
    #define OO 0x0fffffff
    using namespace std;
    typedef long long LL;
    const int N = 1024;
    const LL MOD = 1000000007;
    LL dp[N][64];
    int status[64],scnt;
    int m,n;
    bool judge(int data){
        bool want0 = false;
        for(int i=0;i<m;i++){
            if(!want0) want0 = !(data&1);
            else{
                if(data&1) return false;
                want0 = false;
            }
            data>>=1;
        }
        return (!want0);
    }
    int judge(int a,int b){
        int ret = 0;
        for(int i=0;i<m;i++){
            if((a&1)) {
                if(!(b&1)) return -1;
            }
            else if(b&1){
                ret += (1<<i);
            }
            a>>=1;
            b>>=1;
        }
        return ret;
    }
    int main(){
        cin>>n>>m;
        memset(dp,0,sizeof(dp));
        scnt = 0;
        for(int i=0;i<(1<<m);i++) {
            if(judge(i)) {
                dp[1][i] = 1;
                status[scnt++] = i;
            }
        }
        for(int i=1;i<n;i++) for(int j=0;j<(1<<m);j++){
            if(dp[i][j]){
                for(int s=0;s<scnt;s++){
                    int news = judge(j,status[s]);
                    if(news>=0) {
                        dp[i+1][news] += dp[i][j];
                        dp[i+1][news] %= MOD;
                    }
                }
            }
        }
        printf("%lld
    ",dp[n][0]);
        return 0;
    }
  • 相关阅读:
    2017年3月9日上午学习
    3.17上午
    3.16上午
    3.16下午
    3.15
    2017.3.14
    3.14
    217.3.13上午
    2017.4.7-morning
    2017.4.6-afternoon
  • 原文地址:https://www.cnblogs.com/redips-l/p/6912967.html
Copyright © 2020-2023  润新知