记录编号 581565 评测结果 AAAAAAAAAA
题目名称 棋盘放車 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.052 s
提交时间 2023-08-05 16:37:15 内存使用 2.75 MiB
显示代码纯文本
#include <bits/stdc++.h> 
using namespace std;
typedef long long ll; 
const int N = 22,M = (1<<20)+10; 
//状态压缩dp 
int n,m,t;
ll dp[M],a[N];
int main(){
    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);
        a[x] += (1 << (y-1));
    }
    dp[0] = 1;
    for(int i = 1;i < (1 << n);i++){
        t = 0;
        for(int j = i;j;j &= (j-1))t++;
        for(int j = i&~a[t];j;j &= (j-1)){
            dp[i] += dp[i^(j&-j)];
        }
    } 
    printf("%lld\n",dp[(1<<n)-1]);
    
    return 0;
    
}