代码源:互不侵犯(SCOI,状压DP)

发布时间 2023-10-07 11:09:48作者: ruoye123456

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long f[10][1024][100];
int v[1024];
void init()
{
	for(int i=1;i<1<<n;++i)
	{
		int c=0;
		for(int j=i;j;j=j&(j-1)) c++;
		v[i]=c;  
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m;
	init();
	f[0][0][0]=1;
	
	for(int i=1;i<=n;++i)
	 for(int j=0;j<1<<n;++j)
	  for(int k=0;k<=m;++k)
	  if(f[i-1][j][k])
	  for(int l=0;l<1<<n;++l)
	  if(!(l&j)&&!(l<<1&j)&&!(l>>1&j)&&!(l<<1&l))
	  f[i][l][k+v[l]]+=f[i-1][j][k];
	long long res=0;
	for(int i=0;i<1<<n;++i) res+=f[n][i][m];
	cout<<res<<'\n';
}