poj 3254

来源:互联网 发布:剑三高冷成男捏脸数据 编辑:程序博客网 时间:2024/06/05 10:23

poj 3254

Corn Fields

#include <stdio.h>#include <cstring>#include <iostream>using namespace std;#define mod 100000000int n,m,top=0;int status[1000];int dp[20][1000];int cur[20];void init(int s){top=0;for (int i = 0; i < 1<<m; ++i){if(i&i<<1 || i&cur[s]) continue;status[top++]=i;}}int main(int argc, char const *argv[]){// freopen("input","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){top=0;memset(cur,false,sizeof(cur));memset(dp,false,sizeof(dp));for(int i=0;i<n;i++){for(int j=0;j<m;j++){int a;scanf("%d",&a);if(a==0)cur[i]+=1<<(m-j-1);}// cout<<cur[i]<<" ";}init(0);int st[1000];int t=top;memcpy(st,status,sizeof(status));for(int i=0;i<t;i++)dp[0][i]=1;for(int i=1;i<n;i++){init(i);for(int j=0;j<top;j++){for(int v=0;v<t;v++){// cout<<status[j]<<" ";// cout<<st[v]<<endl;if(status[j]&st[v]) continue;dp[i][j]+=dp[i-1][v];}// cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;}t=top;memcpy(st,status,sizeof(status));}int sum=0;for(int i=0;i<top;i++)sum+=dp[n-1][i];printf("%d\n",sum%100000000);}return 0;}


0 0
原创粉丝点击