题目链接:http://codeforces.com/contest/1230/problem/C
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef pair<int,int > P; 4 const int N=100; 5 int vis[N][N]; 6 int arr[N]; 7 int n,m,a,b,ans=0,cnt=0; 8 P mp[N]; 9 void check(){ 10 int u,v; 11 memset(vis,0,sizeof(vis)); 12 cnt=0; 13 for(int i=0;i<m;i++){ 14 u=arr[mp[i].first]; 15 v=arr[mp[i].second]; 16 if(u>v){ 17 swap(u,v); 18 } 19 if(vis[u][v]==0){ 20 vis[u][v]=1; 21 cnt++; 22 } 23 } 24 ans=max(cnt,ans); 25 } 26 27 void dfs(int a){ 28 if(a==n+1){ 29 check(); 30 return ; 31 } 32 for(int i=1;i<=6;i++){ 33 arr[a]=i; 34 dfs(a+1); 35 } 36 } 37 int main(){ 38 memset(mp,0,sizeof(0)); 39 memset(vis,0,sizeof(0)); 40 cin>>n>>m; 41 for(int i=0;i<m;i++){ 42 scanf("%d%d",&a,&b); 43 mp[i]={a,b}; 44 } 45 dfs(1); 46 cout<<ans<<endl; 47 return 0; 48 }
另一种思路:
当n<7时有多少个边就有多少个dominoes,因为每个点与点之间都可以相连,并且不会使用同一个dominoes。当等于7时,必定有一个是重复的。
解析:https://blog.csdn.net/qq_38946354/article/details/101271185
原文:https://www.cnblogs.com/meanttobe/p/11581625.html