寡人被本题卡了2天,不知诸位爱卿谁可帮朕调调?(大雾大雾,btd吸引人最好用了)
无法通过样例,求助,thx
#include<iostream>
using namespace std;
inline int get(int x){
int num;
for(num=0;x!=0;num++)x&=(x-1);
return num;
}
long long dp[10][600][100],ans,n,kk;
int main(){
cin>>n>>kk;
for(int i=0;i<=(1<<n);i++)if((i&(i<<1))==0)dp[1][i][get(i)]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=(1<<n);j++){
if((j&(j<<1))!=0)continue;
for(int k=0;k<=(1<<n);k++){
if((k&(k<<1))!=0)continue;
if((k&j)!=0)continue;
if((k&(j<<1))!=0)continue;
if(((k<<1)&j)!=0)continue;
for(int num=kk;num>=get(k);num--){
dp[i][k][num]+=dp[i-1][j][num-get(k)];
}
}
}
}
for(int i=0;i<=(1<<n);i++)if((i&(i<<1))==0)ans+=dp[n][i][kk];
cout<<ans;
}