首页 > 其他 > 详细

玉米田复习

时间:2019-01-22 14:44:09      阅读:179      评论:0      收藏:0      [点我收藏+]
 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 }

 

玉米田复习

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!