不知道哪里出错了QAQ
#include <bits/stdc++.h>
using namespace std;
int n,m,a[12];
long long b[12][110][1<<10];
vector<int>c,d[1<<10];
int shuliang(int e)
{
int f = 0;
for(int i = 0;i<n;i++)f+=e>>i&1;
return f;
}
bool check(int i)
{
return !(i&i>>1);
}
int main()
{
cin>>n>>m;
for(int i = 0;i<1<<n;i++)
{
if(check(i))
{
c.push_back(i);
a[i]=shuliang(i);
}
}
for(int i = 0;i<c.size();i++)
{
for(int j = 0;j<c.size();j++)
{
int e = c[i],f=c[j];
if(!(e&f)&&check(e|f))
{
d[e].push_back(f);
}
}
}
b[0][0][0]=1;
for(int i = 1;i<=n+1;i++)
{
for(int j = 0;j<=m;j++)
{
for(auto k:c)
{
for(auto l:d[k])
{
if(j>=a[k])
{
b[i][j][k]+=b[i-1][j-a[k]][l];
}
}
}
}
}
cout<<b[n+1][m][0];
return 0;
}