为什么这道题洛谷题目链接
在洛谷上可以AC啊
在ybt(信息学奥赛一本通)上只有70分ybt链接
代码如下
#include<cstdio>
#include<iostream>
#include<cmath>
#define sr scanf
#define sc printf
#define ll long long
const int N=13,M=1<<12+1;
using namespace std;
int n,k,fa[M],bh[M],ztcd;
ll ans;
ll dp[N][M][N];
void prepare(){
for(int i=0;i<(1<<n);i=-~i){
if(i&(i<<1))continue;
fa[++ztcd]=i;
int shu=i;
while(shu)shu=shu&(shu-1),++bh[ztcd];
}
}
int main(){
sr("%d%d",&n,&k);
prepare();
for(int i=1;i<=ztcd;i=-~i){
if(bh[i]<=k)dp[1][i][bh[i]]=1;
}
for(int i=2;i<=n;i=-~i){
for(int j=1;j<=ztcd;j=-~j){
for(int p=1;p<=ztcd;p=-~p){
if(fa[p]&fa[j])continue;
if((fa[p]<<1)&fa[j])continue;
if(fa[p]&(fa[j]<<1))continue;
for(int s=1;s<=k;s=-~s){
if(bh[j]+s>k)break;
dp[i][j][bh[j]+s]+=dp[i-1][p][s];
}
}
}
}
for(int i=1;i<=n;i=-~i){
for(int j=1;j<=ztcd;j=-~j){
ans+=dp[i][j][k];
}
}
sc("%lld",ans);
}