T2配对
题目描述
有N个编号1,2…,N的男人和有1,2…N个编号的女人。
对于每个 i,j(1 ≤\leq≤ i , j ≤\leq≤ N) 男人i和女人j的匹配度是一个整数。当a[i][j]==1时,男人i和女j可以匹配。当a[i][j]==0时。两人不匹配。芋头正在尝试配出N对一男一女的配对。其中,每个男人和每个女人都必须且只能属于某一个配对。
请计算出芋头配出N对的方案数对 109+710^9+7109+7 取模的结果。
输入格式
输入一个数字N。
接下来N行,第i行有N个空格隔开的数a[i][1]到a[i][N]。
输出格式
输出芋头配出N对方案数对 109+710^9+7109+7 取模的结果
数据范围与提示
1≤N≤211 \leq N \leq 211≤N≤21
a[i][j]a[i][j]a[i][j]是000或111。
样例
输入样例1
3
0 1 1
1 0 1
1 1 1
输出格式
3
输入格式2
4
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
输出格式2
1
输入格式3
1
0
输出样例3
0
输入样例4
21
0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 0 0 1
1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 0
0 0 1 1 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 1 1
0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0
1 1 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0
0 1 1 0 1 1 1 0 1 1 1 0 0 0 1 1 1 1 0 0 1
0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 0
0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1
0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 1 1
0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1
0 1 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 1
0 1 1 0 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1
1 1 1 1 1 0 0 0 0 1 0 0 1 1 0 1 1 1 0 0 1
0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1
1 0 1 1 0 1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 0 1
0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 1 0 1
0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0
1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0
1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0
输出格式4
102515160
考场代码
//得分35/100
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL P=1e9+7;
int n,a[30][30],ans=0;
bool yy[30];
void dfs(int x)
{
if(x==n+1)
{
ans++;
ans%=P;
return;
}
for(int i=1;i<=n;i++)
{
if(yy[i]==0&&a[x][i]==1)
{
yy[i]=1;
dfs(x+1);
yy[i]=0;
}
}
}
int main()
{
freopen("pair.in","r",stdin);
freopen("pair.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
dfs(1);
cout<<ans%P<<endl;
return 0;
}
思路
万能的大法师dfs(误) , 观察数据范围可以推测此题为状压dp,利用f[i][j]表示第i个男人,配对的女人的状态为j,每次j行1的个数即为男人的个数。
该博客探讨了一种使用深度优先搜索(DFS)解决匹配问题的方法。通过输入矩阵表示男性和女性之间的匹配度,程序计算出所有可能的匹配组合,并对结果取模以适应大数运算。题目给出了几个示例输入及对应的输出,包括完全匹配和部分匹配的情况。在样例中,程序实现了DFS的递归解决方案,但可能并不适用于所有规模的数据,暗示可能存在更优的动态规划或位运算解决方案。
249





