AcWing 291. 蒙德里安的梦想
原题链接
中等
作者:
HalfSummer
,
2020-05-08 15:45:16
,
所有人可见
,
阅读 646
#include<iostream>
#include<cstdio>
#include<cstring>
#define Trump 250
#define Pig 250
using namespace std;
const int MaxM = 1 << 15;
long long f[15][MaxM];
bool st[MaxM];
int main() {
int N,M;
while(cin>>N>>M,N || M) {
memset(st,true,sizeof st);
memset(f , 0 ,sizeof f );
for(int i = 0; i < 1 << N; i ++) {
int cnt = 0;
for(int j = 0; j < N;j ++){
if(i >> j & 1 == 1) {
if(cnt & 1) {
st[i] = false;
}
cnt = 0;
}
else {
cnt ++;
}
}
if(cnt & 1){
st[i] = false;
}
}
f[0][0] = 1;
for(int i = 1; i <= M; i ++) {
for(int j = 0; j < (1 << N); j ++) {
for(int k = 0; k < (1 << N); k ++) {
if((j & k) == 0 && st[j | k]) f[i][j] += f[i-1][k];
}
}
}
cout<<f[M][0]<<endl;
}
}