P1657 选书
x本书分给x个人,一个人喜欢两本书,问每个人都得到喜欢的书的方案数是多少。
用二维数组love[N][2]储存第i个人喜欢的书,bool z[N]表示书是否被选走,用dfs(深搜)即可。
点击查看代码
#include<iostream>
using namespace std;
const int N = 25;
int a[N][2], total = 0, n;
bool b[N];
void dfs(int start){
if(start == n + 1){
total++;
return;
}
for(int i = 1;i <= n;++i){
for(int j = 0;j < 2;++j){
if(!b[i] && a[start][j] == i){
b[i] = 1;
dfs(start + 1);
b[i] = 0;
}
}
}
}
int main(){
cin >> n;
for(int i = 1;i <= n;++i){
cin >> a[i][0] >> a[i][1];
}
dfs(1);
cout << total << endl;
}
浙公网安备 33010602011771号