记录编号 |
36904 |
评测结果 |
AAAAAAAAAA |
题目名称 |
棋盘放車 |
最终得分 |
100 |
用户昵称 |
TBK |
是否通过 |
通过 |
代码语言 |
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;
}