题目链接:https://codeforces.com/contest/1230/problem/C
题目大意:21枚多米诺牌,给你一个图,将多米诺牌放到图的边上,由同一个点发出的所有边,边上多米诺牌对应该点的一侧相同。
such as:
题解:暴力枚举,即先给每个点一个值,然后判断在这种情况下可以放置多少个多米诺牌,枚举的时候可以dfs递归
#include<bits/stdc++.h> using namespace std; const int N=200; int n,m; int d[N]; int l[N],r[N]; int ans=0; bool mark[N][N]; void check(){ int sum=0; memset(mark,0,sizeof(mark)); for(int i=1;i<=m;i++){ int a=d[l[i]]; int b=d[r[i]]; if(a>b) swap(a,b); if(!mark[a][b]){//判断a,b这种牌有没有被用过; mark[a][b]=1; sum++; } } ans=max(ans,sum); } void dfs(int x){ if(x==n+1){//如果所有的点都被赋值,那就判断在这种情况下可以多少放置多少个; check(); return ; } for(int i=1;i<=6;i++){ d[x]=i; dfs(x+1); } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ scanf("%d%d",&l[i],&r[i]); //指的是从l到r有一条边 } dfs(1); cout<<ans<<endl; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。