zoukankan      html  css  js  c++  java
  • POJ 3254 Corn Fields(状态压缩)

    一道状态压缩的题,错了好多次....应该先把满足的情况预处理出来

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int fitnum,n,m;
    int maps[20],state[1<<12];
    int dp[20][1<<12];
    #define mod 1000000000
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            memset(maps,0,sizeof(maps));
            fitnum = 0;
            for(int i = 1;i <= n;i++)
            {
                for(int j = 1;j <= m;j++)
                {
                    int s;
                    scanf("%d",&s);
                    if(!s)
                    maps[i] += 1<<(m-j);
                }
            }
            memset(dp,0,sizeof(dp));
            memset(state,0,sizeof(state));
            for(int i = 0;i < (1<<m);i++)
            {
                if((i&(i<<1)) == 0)
                state[fitnum++] = i;
            }
            for(int i = 0;i < fitnum;i++)
            {
                if(!(state[i] & maps[1]))
                    dp[1][i] = 1;
            }
            for(int i = 2;i <= n;i++)
            {
                for(int k = 0;k < fitnum;k++)
                {
                    if(state[k] & maps[i]) continue;
                    for(int j = 0;j < fitnum;j++)
                    {
                        if(state[j] & maps[i-1]) continue;
                        if(state[j] & state[k]) continue;
                        dp[i][k] = (dp[i][k]%mod + dp[i-1][j]%mod)%mod;
                    }
                }
            }
            int ans = 0;
            for(int i = 0;i < fitnum;i++)
            {
                ans = (ans%mod + dp[n][i]%mod) % mod;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    数组和函数
    循环练习题
    JavaScript 循环
    函数
    JavaScript简介2
    JS练习题1
    JavaScript简介
    css样式综合
    格式与布局
    列表和方块
  • 原文地址:https://www.cnblogs.com/jifahu/p/5449246.html
Copyright © 2011-2022 走看看