题目链接https://www.acwing.com/problem/content/293/
题目:
#include
#include
#include
#include
#include
using namespace std;
long long f[12][1<<12];
vector<int >a[1<<12];
bool sta[1<<11];
int main(){
int n,m;
while(cin>>n>>m,n||m){
memset(sta,0,sizeof sta);
for(int i=0;i<1<<n;i++){
int ct=0;
sta[i]=1;
for(int j=0;j<n;j++){
if(i>>j&1){
if(ct&1){
sta[i]=0;
break;
}
ct=0;
}else ct++;
}
if(ct&1) sta[i]=0;
}
for(int i=0;i<1<<n;i++){
a[i].clear();
for(int j=0;j<1<<n;j++){
if((i&j)==0&&sta[i|j]){
a[i].push_back(j);
}
}
}
memset(f,0,sizeof f);
f[0][0]=1;
for(int i=1;i<=m;i++){
for(int j=0;j<1<<n;j++){
for(auto t:a[j]){
f[i][j]+=f[i-1][t];
}
}
}
cout<<f[m][0]<<endl;
}
return 0;
}