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;
}
posted on 2025-12-19 19:39  一方见地  阅读(0)  评论(0)    收藏  举报