记录编号 581565 评测结果 AAAAAAAAAA
题目名称 棋盘放車 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.052 s
提交时间 2023-08-05 16:37:15 内存使用 2.75 MiB
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N = 22,M = (1<<20)+10;
  5. //状态压缩dp
  6. int n,m,t;
  7. ll dp[M],a[N];
  8. int main(){
  9. freopen("examone.in","r",stdin);
  10. freopen("examone.out","w",stdout);
  11. scanf("%d%d",&n,&m);
  12. for(int i = 1;i <= m;i++){
  13. int x,y;
  14. scanf("%d%d",&x,&y);
  15. a[x] += (1 << (y-1));
  16. }
  17. dp[0] = 1;
  18. for(int i = 1;i < (1 << n);i++){
  19. t = 0;
  20. for(int j = i;j;j &= (j-1))t++;
  21. for(int j = i&~a[t];j;j &= (j-1)){
  22. dp[i] += dp[i^(j&-j)];
  23. }
  24. }
  25. printf("%lld\n",dp[(1<<n)-1]);
  26. return 0;
  27. }