• 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排


    【算法】状压DP

    【题解】对于上一行的每个状态,每行进行DFS。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define ll long long
    using namespace std;
    const int maxn=20,maxN=10000,MOD=100000000;
    ll f[2][maxN];
    int n,m,x,h;
    bool map[maxn][maxn];
    void dfs(int p,int now,int pre){
        if(p==m){
            f[x][now]=(f[x][now]+f[1-x][pre])%MOD;
        }
        else{
            if(!((1<<(p-1))&now)&&!((1<<p)&pre)&&map[h][p+1])dfs(p+1,now|(1<<p),pre);
            dfs(p+1,now,pre);
        }
    }    
    int main(){
        scanf("%d%d",&n,&m);
        int u;
        for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
            scanf("%d",&u);
            map[i][j]=u;
        }
        x=0;
        memset(f[x],0,sizeof(f[x]));
        f[x][0]=1;
        for(int i=1;i<=n;i++){
            x=1-x;h=i;
            memset(f[x],0,sizeof(f[x]));
            for(int j=0;j<(1<<m);j++)if(f[1-x][j]){
                dfs(0,0,j);
            }
        }
        long long ans=0;
        for(int j=0;j<(1<<m);j++)ans=(ans+f[x][j])%MOD;
        printf("%lld",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    MarkDown SequenceDiagram 语法
    mysql导出数据库文档
    使用gitlab作为go mod私服
    go context理解
    go-micro入门
    golang 接口测试
    小程序配置 app.json
    Nginx 配置详解(2)
    windows下安装nginx
    任意文件夹下打开命令提示窗
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7451763.html
Copyright © 2020-2023  润新知