怎么说呢家人们,刚开始看这道题还蛮难的QAQ,之后就逐渐明白了,想说点讲解吧!题解区的大佬说的又太好了.所以我只有一句话,这道题是纸老虎
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 13,M = 1<<N;
vector<int> v[M];
int st[M],f[N][M],n,m;
signed main()
{
while(cin >> n >> m,n||m){
for(int i = 0 ; i < 1<<n ; i++) {
int cnt = 0,ok = 1;
for(int j = 0 ; j < n ; j++){
if((i>>j) & 1){
if(cnt&1) break;
}
else cnt++;
}
if(cnt&1) ok = 0;
st[i] = ok;
}
for(int i = 0 ; i < 1<<n ; i++){
v[i].clear();
for(int j = 0 ; j < 1<<n ; j++)
if((i&j)==0&&st[i|j])
v[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(int s : v[j])
f[i][j] += f[i-1][s];
}
cout << f[m][0] << endl;
}
return 0;
}
有什么疑问的欢迎评论区提问!有问必答