比赛 20120316 评测结果 AAAAAAAAAA
题目名称 棋盘放車 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-17 12:13:04
显示代码纯文本
#include<stdio.h>

typedef long long Int;

int n,m,s,x,y;

Int f[1200000];

bool flag[21][21];

int main(int argc,char *argv[])
{
	freopen("examone.in","r",stdin);
	freopen("examone.out","w",stdout);
	int i,j,k;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		flag[x][y]=true;
	}
	s=(1<<n)-1;
	f[0]=1;
	for(i=1;i<=s;i++)
	{
		int l=0;
		for(j=0;j<n;j++)
		{
			k=1<<j;
			if((i&k)==k)l++;
		}
		for(j=0;j<n;j++)
		{
			if(flag[l][n-j])continue;
			k=1<<j;
			if((i&k)==k)
			{
				f[i]+=f[i&(~k)];
			}
		}
	}
	printf("%lld\n",f[s]);
	return 0;
}