题目链接:https://codeforces.com/contest/1230/problem/C
题目大意:有21种骰子,每种筛子至多用一次,要求在边上放骰子,要求朝向同一个点的骰子的点数要一致
题目思路:sb了啊,一直推推推推,推毛线哦,规律都找自闭了,看了题解以后恍然大悟,一共就七个点,每个点就六种情况,找个p规律啊,暴力就完事了啊!直接枚举出所有情况,然后看每一种情况行不行就行了啊!枚举朝向每个点的骰子的点数,然后再看看根据找个点数,边最多能放一个骰子,取max就好,我真菜
以下是代码:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
const int MAXN = 100+5;
const int MOD =1e9+7;
int num[MAXN],n,m;
struct node{
int x,y;
}a[MAXN];
bool vis[7][7];
int ans;
void check(){
memset(vis,0,sizeof(vis));
int temp=0;
rep(i,1,m){
int l=num[a[i].x],r=num[a[i].y];
if(l>r)swap(l,r);
if(!vis[l][r]){
vis[l][r]=1;
temp++;
}
}
ans=max(ans,temp);
}
void dfs(int x){
if(x==n+1){
check();
return;
}
rep(i,1,6){
num[x]=i;
dfs(x+1);
}
}
int main(){
while(cin>>n>>m){
ans=0;
rep(i,1,m){
cin>>a[i].x>>a[i].y;
}
dfs(1);
cout<<ans<<endl;
}
return 0;
}