P1657 选书
1:思路:一看数据,嗯....!,爆搜嘛?,看一眼题目,嗯!!!,爆搜!
配上俺的无敌小剪枝,按下拿下!
2:暴力枚举每个人获得分别每本书方案,然后统计符合要求的方案数
剪枝:(当前这本书被拿过,或者当前这个人不喜欢这本书,直接return,肯定不符合)
if(vis[i]||a[pos][i]==false)continue;
3:ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,b[25],x,y,ans;
bool a[25][25],vis[25];
void dfs(int pos){if(pos>n){int flag=0;for(int i=1;i<=n;i++){if(a[i][b[i]]==false){flag=1;break;} }if(flag==0) ans++;return;}for(int i=1;i<=n;i++){if(vis[i]||a[pos][i]==false)continue;vis[i]=true;b[pos]=i;dfs(pos+1);vis[i]=false;}
}void solve() {cin>>n;for(int i=1;i<=n;i++){cin>>x>>y;a[i][x]=a[i][y]=true;}dfs(1);cout<<ans<<"\n";
}
signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int tt=1;//cin>>tt;while(tt--) solve();return 0;
}
over~