• Corn Fields


    题目大意:有一个M*N的牧场,G(i, j) = 1表示这块地营养丰富,可以喂养牛,等于0表示贫瘠,不能喂养牛,所有的牛都讨厌与别的牛相邻,求有多少种放置牛的方式。

    分析:算是炮兵那个题的弱化版吧,先求出来所有的合法状态(不到500种),然后与上一行的状态匹配即可。

    代码如下:

    ===============================================================================================================================

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    
    const int MAX_N = 1<<12;
    const int MAX_M = 13;
    const int Mod = 1e8;
    
    int dp[MAX_M][MAX_N];
    int bit[1<<12], cnt, M, N;
    
    void DFS(int layer, int state)
    {
        if(layer >= N)
        {
            bit[cnt++] = state;
            return ;
        }
        DFS(layer+1, state);
        DFS(layer+2, state|(1<<layer));
    }
    
    int main()
    {
        while(scanf("%d%d", &M, &N) != EOF)
        {
            int x, data[MAX_M]={0};
    
            cnt = 0;
            DFS(0, 0);
    
            for(int i=1; i<=M; i++)
            for(int j=0; j<N; j++)
            {
                scanf("%d", &x);
                data[i] = data[i] * 2 + (x^1);
            }
    
            memset(dp, 0, sizeof(dp));
            dp[0][0] = 1;
    
            for(int t=1; t<=M; t++)
            {
                for(int i=0; i<cnt; i++)if(!(data[t] & bit[i]))
                for(int j=0; j<cnt; j++)if(!(data[t-1]&bit[j]))
                {
                    if(!(bit[i] & bit[j]))
                    {
                        dp[t][i] += dp[t-1][j];
                        dp[t][i] %= Mod;
                    }
                }
            }
    
            int ans = 0;
    
            for(int i=0; i<cnt; i++)
                ans = (ans+dp[M][i]) % Mod;
    
            printf("%d
    ", ans);
        }
    
        return 0;
    }
  • 相关阅读:
    echarts onClick执行之前都要取消绑定一次
    echarts 打包完之后体积太大解决方案。
    saga处理多个loading最少0.5s
    SVN命令详解
    netfilter/iptables原理
    交换两个变量的值,不使用第三个变量的四种法方
    linux常用命令整理
    vi技巧
    linux进程管理的常用命令
    gcc常用命令
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4853650.html
Copyright © 2020-2023  润新知