【题目】http://codeforces.com/problemset/problem/887/B
【题意】有三个立方体,每个面上有0-9中的6个不同的数,由这3个立方体的一个面能组成x以下的所有的数,求最大的x
【代码】
#include<bits/stdc++.h>
using namespace std;
int mp[5][10];
int vis[5][10];
int v[10];
int n;
bool dfs(int x)//这个dfs只能跑两层。否则vis就不对了,只适合于这个题orz
{
int t=x%10;
x/=10;
int ok=0;
for(int j=1; j<=n; j++)
{
if(v[j])
continue;
for(int k=1; k<=6; k++)
{
if(mp[j][k]==t)
{
memset(v,0,sizeof(v));
v[j]=1;
if(x==0)
return 1;
else
ok|=dfs(x);
}
}
}
return ok;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=6; j++)
{
cin>>mp[i][j];
}
}
for(int i=1; i<100; i++)
{
memset(vis,0,sizeof(vis));
memset(v,0,sizeof(v));
int ii=i;
if(!dfs(ii))
{
cout<<i-1;
break;
}
}
}