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

    #include<iostream>
    #include<cstdio>
    #include<cstring>
     
    using namespace std;
     
    int rem[15],state[1000],dp[15][1000];
    int m,n,most;
     
    int find_all_state()
    {
    	most=1;
    	int line=1<<n;
    	for(int i=0;i<line;++i)
    	{
    		if((i&(i<<1))==0)
    		{
    			state[most]=i;
    			++most;
    		}
    	}
    	--most;
    	return 0;
    }
     
    int main()
    {
    	while(scanf("%d%d",&m,&n)!=EOF)
    	{
     
    		memset(rem,0,sizeof(rem));
    		find_all_state();
     
    		for(int i=1;i<=m;++i)
    		{
    			int tem;
    			for(int j=1;j<=n;++j)
    			{
    				scanf("%d",&tem);
    				if(tem==0)
    					rem[i]=rem[i]|(1<<(n-j));
    			}
    		}
     
    		memset(dp,0,sizeof(dp));
    		for(int i=1;i<=most;++i)
    		{
    			if((state[i]&rem[1])==0)
    			{
    				dp[1][i]=1;
    			}
    		}
     
    		for(int i=2;i<=m;++i)
    		{
    			for(int k=1;k<=most;++k)
    			{
    				if((state[k]&rem[i])==0)
    				{
    					for(int j=1;j<=most;++j)
    					{
    						if(((state[j]&rem[i-1])==0)&&((state[j]&state[k])==0))
    						{
    							dp[i][k]=(dp[i][k]+dp[i-1][j])%100000000;
    						}
    					}
    				}
    			}
    		}
     
    		int ans=0;
    		for(int i=1;i<=most;++i)
    		{
    			ans=(ans+dp[m][i])%100000000;
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #define ls rt<<1
    #define rs (rt<<1)+1
    #define PI acos(-1)
    #define eps 1e-8
    #define ll long long
    #define fuck(x) cout<<#x<<"     "<<x<<endl;
    typedef pair<int,int> pii;
    const int inf=2e9;
    const int maxn=1e6+10;
    int d[4][2]={1,0,-1,0,0,1,0,-1};
    //int lowbit(int x){return x&-x;}
    //void add(int x,int v){while(x<=n)bit[x]+=v,x+=lowbit(x);}
    //int sum(int x){int ans=0;while(x>=1) ans+=bit[x],x-=lowbit(x);return ans;}
    inline ll read() {
        ll s = 0,w = 1;
        char ch = getchar();
        while(!isdigit(ch)) {
            if(ch == '-') w = -1;
            ch = getchar();
        }
        while(isdigit(ch))
            s = s * 10 + ch - '0',ch = getchar();
        return s * w;
    }
    inline void write(ll x) {
        if(x < 0)
            putchar('-'), x = -x;
        if(x > 9)
            write(x / 10);
        putchar(x % 10 + '0');
    }
    const int mod=1e8;
    int m,n,tot,state[32000],cur[20],dp[15][32000];
    
    bool fit(int x,int k){
        return !(state[x]&cur[k]);
    }
    void init(){
        int sum=1<<n;
        for(int i=0;i<sum;i++){
            if(!(i&(i<<1)))
                state[++tot]=i;
        }
    }
    
    int main(){
        int ans=0;
        m=read();
        n=read();
        init();
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
            {
                int tmp;
                tmp=read();
                if(!tmp)
                    cur[i]|=(1<<(n-j));
            }
        for(int i=1;i<=tot;i++)
            if(fit(i,1))
                dp[1][i]=1;
        for(int i=2;i<=m;i++)
            for(int j=1;j<=tot;j++)
            {
                if(!fit(j,i)) continue;
                for(int k=1;k<=tot;k++)
                {
                    if(!fit(k,i-1)||state[j]&state[k]) continue;
                    dp[i][j]+=dp[i-1][k];
                    dp[i][j]%=mod;
                }
            }
        for(int j=1;j<=tot;j++)
            ans+=dp[m][j],ans%=mod;
        write(ans);
        return 0;
    }
    
    
    
    
  • 相关阅读:
    计算机中如何表示数字-01机器数与真值
    计算机中如何表示数字-06浮点数
    Java基础类型与其二进制表示
    char类型与Unicode的编码
    数组的详细总结
    Java中的instanceof关键字
    java 启动多线程
    elasticsearch7.2 集群搭建 插件安装 和kibana安装
    java读取 properties配置文件的两种方式
    查询mysql 库和表占的大小
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755066.html
Copyright © 2011-2022 走看看