BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排

Posted ONION_CYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1725: [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

 

以上是关于BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1725[Usaco2006 Nov]Corn Fields牧场的安排*

BZOJ1725[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排

bzoj1725[USACO2006 Nov]Corn Fields牧场的安排

bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状态压缩DP)

bzoj1725/Usaco2006 NovCorn Fields牧场的安排——状压dp