Corn Fields

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int Ni = 13;
 6 const int mod = 100000000;
 7 int map[Ni][Ni];
 8 int dp[Ni][1<<12];
 9 int n,m,add;
10 void dfs(int i,int s0,int s,int cur)
11 {
12     if(cur>=m) {dp[i][s]=(dp[i][s]+add)%mod;return;}
13     dfs(i,s0,s,cur+1);
14     if(cur<m&&!(s0&1<<cur)&&map[i][cur]&&!(s&3<<cur))
15         dfs(i,s0,s|1<<cur,cur+2);
16 }
17 int main()
18 {
19     int i,j,ans;
20     memset(map,0,sizeof(map));
21     while(~scanf("%d%d",&n,&m))
22     {
23         for(i=1;i<=n;i++)
24             for(j=0;j<m;j++)
25             {
26                 scanf("%d",&map[i][j]);
27             }
28         int rt=1<<m;
29         memset(dp,0,sizeof(dp));
30         add=1;
31         dfs(1,0,0,0);
32         for(i=2;i<=n;i++)
33         {
34             for(j=0;j<rt;j++) if(dp[i-1][j])
35             {
36                 add=dp[i-1][j];
37                 dfs(i,j,0,0);
38             }
39         }
40         ans=0;
41         for(j=0;j<rt;j++)
42             ans=(ans+dp[n][j])%mod;
43         printf("%d\n",ans);
44     }
45     return 0;
46 }

 

posted @ 2012-09-14 17:32  qijinbiao1  阅读(288)  评论(0编辑  收藏  举报