把每一行看做一个二进制数
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define LL long long
#define MOD 1000000007
#define pi 3.141592653589
using namespace std;
LL ans,dp[10][100][600];
int n,meow,all,i,j,k,p,f1[600],f2[600][600],cnt[600];
void pre()
{
for(i=0;i<=all;i++)
if((i&(i>>1))==0)
{
f1[i]=1;
for(j=i;j;j>>=1)
if(j&1) cnt[i]++;
}
for(i=0;i<=all;i++) if(f1[i])
for(j=0;j<=all;j++) if(f1[j])
if(((i&j)==0)&&(((i>>1)&j)==0)&&(((j>>1)&i)==0)) f2[i][j]=1;
}
int main()
{
scanf("%d%d",&n,&meow);
all=(1<<n)-1;
pre();
for(i=0;i<=all;i++)
if(f1[i]) dp[1][cnt[i]][i]=1;
for(k=1;k<n;k++)
for(i=0;i<=all;i++) if(f1[i])
for(j=0;j<=all;j++) if(f1[j])
if(f2[i][j])
for(p=cnt[i];p+cnt[j]<=meow;p++)
dp[k+1][p+cnt[j]][j]+=dp[k][p][i];
for(i=0;i<=all;i++)
ans+=dp[n][meow][i];
printf("%lld",ans);
return 0;
}