码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3254 Corn Fields(状态压缩DP)

时间:2014-11-23 23:29:33      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:blog   io   os   sp   for   on   2014   log   ad   

状态压缩DP,注意不能选的地方和不挨着对本行一个意思,本行自己选的是另一个意思。可相邻与范围限制不同。



#include<algorithm>
#include<iostream>
#include<iterator>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<map>
#define inf (1<<30)
#define MOD 100000000
using namespace std;
typedef long long ll;
const int maxn=10+100;
ll dp[2][1<<14];
int vis[1<<14];
ll add;
int in[14];
int N,M;
int cp;
void dfs(int r,int c,int cur)
{
    if(cur==M)
        {dp[r][c]=(dp[r][c]+add)%MOD;return;}
    dfs(r,c,cur+1);
    if(cur<=M-1 && !((1<<cur)&c))
    {
        if(((1<<cur)&cp)) return;
        if(cur==0)
        {
            if(!((1<<cur+1)&c))
                dfs(r,c| (1<<cur),cur+1);
        }
        else if(cur==M-1)
        {
            if(!((1<<cur-1)&c))
                dfs(r,c|(1<<cur),cur+1);
        }
        else if(!((1<<cur+1)&c) && !((1<<cur-1)&c))
            dfs(r,c | (1<<cur) ,cur+2);
    }

}//处理好自己的位置就行,之前用while错了
int main()
{
    while(~scanf("%d%d",&N,&M))
    {
        int rt=(1<<M)-1;
        for(int i=0;i<N;i++)
        {
            int t=0,k;
            for(int j=0;j<M;j++)
            {
                scanf("%d",&k);
                k=1-k;
                if(k)
                    t|=1<<j;
            }
            in[i]=t;
        }
        memset(dp,0,sizeof(dp));
        add=1;cp=in[0];
        dfs(0,0,0);
        for(int i=1;i<N;i++)
        {
            memset(dp[i%2],0,sizeof(dp[0]));
            for(int j=0;j<=rt;j++)if(dp[(i-1)%2][j])
            {
                add=dp[(i-1)%2][j];
                cp=j|in[i];
                dfs(i%2,0,0);
            }
        }
        ll ans=0;
        for(int j=0;j<=rt;j++)
            ans+=dp[(N-1)%2][j],ans%=MOD;
        printf("%I64d\n",ans);
    }


    return 0;
}


POJ 3254 Corn Fields(状态压缩DP)

标签:blog   io   os   sp   for   on   2014   log   ad   

原文地址:http://blog.csdn.net/gg_gogoing/article/details/41419561

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!