标签: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