记录编号 | 420052 | 评测结果 | WWWWWAWWWW | ||
---|---|---|---|---|---|
题目名称 | 棋盘放車 | 最终得分 | 10 | ||
用户昵称 | 是否通过 | 未通过 | |||
代码语言 | C++ | 运行时间 | 0.034 s | ||
提交时间 | 2017-07-03 19:31:33 | 内存使用 | 16.31 MiB | ||
#include<iostream> #include<cstdio> #include<vector> using namespace std; const int maxn=20; long long f[1<<maxn],n,temp,m,un[30],cnt[1<<maxn]; inline void in() { freopen("examone.in","r",stdin); freopen("examone.out","w",stdout); scanf("%lld%lld",&n,&m); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); un[a]|=1<<(n-b); } temp=(1<<n)-1; for(long long i=1;i<=temp;i++) { cnt[i]+=cnt[i>>1]+(i&1); } } inline long long lowbit(int x) { return x&-x; } inline void dp() { f[0]=1; for(long long i=1;i<=temp;i++) { for(long long j=1;j;j-=lowbit(j)) { long long k=lowbit(j); if(k&un[cnt[i]]) continue; f[i]+=f[i-k]; } } } inline void p() { printf("%lld",f[temp]); } int main() { in(); dp(); p(); return 0; }