求调!!!
查看原帖
求调!!!
1393299
jiangdr楼主2024/9/12 14:58
#include<bits/stdc++.h>
using namespace std;
int data[10010],sum[10010],f[11][10010][100],cnt,N,K,ans=0;
//行数,该行状态对应编号,至该行国王数 
void pre()
{
	for(int i=0;i<(1<<N);i++)
	{
		if(i&(i<<1)) continue;
		int k=0;
		for(int j=0;j<N;j++)
			if((1<<j)&i) k++;	
		data[++cnt]=i;
		sum[cnt]=k;
	}	
}
int main()
{
	cin>>N>>K;
	pre();
	for(int i=1;i<=cnt;i++)
	{
		if(K>=sum[i]) f[1][i][sum[i]]=1;
	}	
	for(int i=2;i<=N;i++)//行数 
		for(int j=1;j<=cnt;j++)//当前行状态编号 
			for(int k=sum[j];k<=K;k++)//当前行以上总国王数 
				for(int t=1;t<=cnt;t++)//跑上一行状态编号
				{
					if(!(data[i]&data[t])&&!(data[t]&(data[i]<<1))&&!(data[t]&(data[i]>>1)))
						f[i][j][k]+=f[i-1][t][k-sum[j]];
				}
	for(int i=1;i<=cnt;i++)	
	    ans+=f[N][i][K];
	cout<<ans;			
	return 0;
}
2024/9/12 14:58
加载中...