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

玉米田复习

时间:2019-01-22 15:06:12      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:dea   void   tin   def   turn   复习   can   i++   fit   

 1 #include<bits/stdc++.h>
 2 #define Set int
 3 using namespace std;
 4 const int mod=1e8;
 5 int n,m;
 6 Set cur[15];
 7 Set state[1500];
 8 int cnt,ans;
 9 int f[15][1500];
10  
11 inline void first_deal()
12 {
13     Set sum=1<<n;
14     for(Set i=0;i<sum;i++)
15         if( !(i&(i<<1)) ) state[++cnt]=i; 
16 }
17  
18 inline bool fit(int x,int k)
19 {
20     return !(state[x]&(~cur[k]));
21 } 
22  
23 int main()
24 {
25     scanf("%d%d",&m,&n);
26     int x;
27     first_deal(); 
28     for(int i=1;i<=m;i++)
29         for(int j=n-1;j>=0;j--){
30             scanf("%d",&x);
31             if(x) cur[i]|=(1<<j);//把can的第j位设置为0; 
32         }
33     for(Set i=1;i<=cnt;i++)
34         if(fit(i,1)) f[1][i]=true;
35     for(int i=2;i<=m;i++)
36         for(int j=1;j<=cnt;j++)  //枚举当前状态编号 
37         {
38             if(!fit(j,i)) continue;
39             for(int k=1;k<=cnt;k++) //枚举上一层可行状态编号 
40             {
41                 if(!fit(k,i-1)) continue;
42                 if(!(state[j]&state[k])) 
43                     f[i][j]=(f[i][j]+f[i-1][k])%mod;
44             }
45         }
46     for(int i=1;i<=cnt;i++)
47         ans=(ans+f[m][i])%mod;
48     printf("%d",ans);
49     return 0;
50 }

 

玉米田复习

标签:dea   void   tin   def   turn   复习   can   i++   fit   

原文地址:https://www.cnblogs.com/mzg1805/p/10303685.html

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