记录编号 36904 评测结果 AAAAAAAAAA
题目名称 棋盘放車 最终得分 100
用户昵称 GravatarTBK 是否通过 通过
代码语言 C++ 运行时间 0.690 s
提交时间 2012-03-21 09:30:55 内存使用 8.27 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <iomanip>
#include <vector>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
long long f[1<<20];
int N,M;
bool G[21][21];
int main(void)
{
	freopen("examone.in","r",stdin);
	freopen("examone.out","w",stdout);
	scanf("%d%d",&N,&M);
	for(int i=1;i<=M;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		G[x][y]=true;
	}
	int s=(1<<N)-1;
	f[0]=1;
	for(int i=1;i<=s;i++)
	{
		int h=0;
		for(int j=0;j<N;j++)
		{
			int k=(1<<j);
			if((i&k)==k)
				h++;
		}
		for(int j=0;j<N;j++)
		{
			if(G[h][N-j])
				continue;
			int k=(1<<j);
			if((i&k)==k)
				f[i]+=f[(i&(~k))];
		}
	}
	printf("%lld\n",f[s]);
	return 0;
}