zoukankan      html  css  js  c++  java
  • poj 3254 Corn Fields 状压dp

    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define mod 100000000
    int M,N,top=0;
    int cur[20],dp[20][600];
    int state[600],num[110];
    bool ok(int x)
    {
        if(x&x<<1) return 0;
        return 1;
    }
    bool fit(int x,int k)
    {
        if(x&cur[k]) return 0;
        return 1;
    }
    void init()
    {
        top=0;
        int tot=1<<N;
        for(int i=0;i<tot;i++)
            if(ok(i))
            state[++top]=i;
    }
    int main()
    {
        while(scanf("%d%d",&M,&N)!=EOF)
        {
            init();
            memset(dp,0,sizeof(dp));
            int i,j;
            for(int i=1;i<=M;i++)
            {
                cur[i]=0;
                int num;
                for(int j=1;j<=N;j++)
                {
                    scanf("%d",&num);
                    if(num==0) cur[i]+=(1<<(N-j));
                }
            }
            for(int i=1;i<=top;i++)
                if(fit(state[i],1))
                    dp[1][i]=1;
            for(int i=2;i<=M;i++)
            {
                for(int k=1;k<=top;k++)
                {
                    if(!fit(state[k],i)) continue;
                    for(int j=1;j<=top;j++)
                    {
                        if(!fit(state[j],i-1)) continue;
                        if(state[k]&state[j]) continue;
                        dp[i][k]=(dp[i][k]+dp[i-1][j])%mod;
                    }
                }
            }
            int ans=0;
            for(int i=1;i<=top;i++)
                ans=(ans+dp[M][i])%mod;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    WIFI芯片,结构光和ToF
    Ubuntu + Python
    React-Native 报错处理
    GPS && AGPS
    Feed流
    Kafka基础知识总结
    Kafka海量日志收集架构之Watcher监控告警-watcher 基础语法与使用
    4-23学习心得
    4-22 学习心得
    4-21学习心得
  • 原文地址:https://www.cnblogs.com/vermouth/p/3844807.html
Copyright © 2011-2022 走看看