2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int mod=1e9+7; int n,a[22][22],dp[1<<21]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); dp[0]=1;//集合里没有女人,肯定也没有男人,方案数为 1 for(int S=1;S<1<<n;S++){ int S2=S,t=0; while(S2>0) t+=(S2&1)?1:0,S2>>=1;//求有多少个女人,有多少个女人就有多少个男人 for(int i=1;i<=n;i++) if(a[t][i]==1&&(S>>(i-1))&1)//判断第 t 个男人是否能和第 i 个女人匹配且集合中有这个女人 dp[S]=(dp[S]+dp[S-(1<<(i-1))])%mod; } printf("%d",dp[(1<<n)-1]); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int mod=1e9+7; int n,a[22][22],dp[1<<21]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); dp[0]=1;//集合里没有女人,肯定也没有男人,方案数为 1 for(int S=1;S<1<<n;S++){ int S2=S,t=0; while(S2>0) t+=(S2&1)?1:0,S2>>=1;//求有多少个女人,有多少个女人就有多少个男人 for(int i=1;i<=n;i++) if(a[t][i]==1&&(S>>i-1)&1)//判断第 t 个男人是否能和第 i 个女人匹配且集合中有这个女人 dp[S]=(dp[S]+dp[S-(1<<i-1)])%mod; } printf("%d",dp[(1<<n)-1]); return 0; }
- 1
信息
- ID
- 1722
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 5
- 标签
- 递交数
- 43
- 已通过
- 18
- 上传者