题目描述

小胖最近迷上了3D物体,尤其是立方体。他手里有很多个立方体,他想让所有的立方体全都长得一样,所以他决定给某些立方体的表面重涂颜色,使得所有的立方体完全相同。但是小胖是很懒的,他想知道最少涂多少次颜色,可以让所有立方体完全相同。

Input

输入包含多组数据,每组数据第一行n(1<=n<=4),表示立方体的数量,接下来n行,每行6个字符串,表示立方体6个面的颜色:Color 1 Color 2 Color 3 Color 4 Color 5 Color 6,中间用一个空格隔开。
其中,面的标号如下:

n=0表示输入结束。
两个立方体被视为相同,当且仅当他们可以在某种摆放方式下,每个面的颜色都对应相同。

Output

每组数据,输出一行一个整数,表示最少的涂色数。(涂一个面算一次涂色)

Sample Input

3
scarlet green blue yellow magenta cyan
blue pink green magenta cyan lemon
purple red blue yellow cyan green
2
red green blue yellow magenta cyan
cyan green blue yellow magenta red
2
red green gray gray magenta cyan
cyan green gray gray magenta red
2
red green blue yellow magenta cyan
magenta red blue yellow cyan green
3
red green blue yellow magenta cyan
cyan green blue yellow magenta red
magenta red blue yellow cyan green
3
blue green green green green blue
green blue blue green green green
green green green green green sea-green
3
red yellow red yellow red yellow
red red yellow yellow red yellow
red red red red red red
4
violet violet salmon salmon salmon salmon
violet salmon salmon salmon salmon violet
violet violet salmon salmon violet violet
violet violet violet violet salmon salmon
1
red green blue yellow magenta cyan
4
magenta pink red scarlet vermilion wine-red
aquamarine blue cyan indigo sky-blue turquoise-blue
blond cream chrome-yellow lemon olive yellow
chrome-green emerald-green green olive vilidian sky-blue
0

Sample Output

4
2
0
0
2
3
4
4
0
16

分析

也许是我做过的最难的模拟题
我们知道一个立方体对于那个编号方式,可以有很多不同的摆放
打表出来不就好了?
然后我们用爆搜,每搜齐n个就用贪心思想求出总需涂色数
这里偷懒:用map替代hash给字符串标个号

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#define rep(i,a,b) for (i=a;i<=b;i++)
using namespace std;
char c[101];
int a[5][7];
int r[5];
map<string,int> p;
int d[25][7]=
{
{0,0,0,0,0,0,0},
{0,3,2,6,1,5,4},
{0,3,1,2,5,6,4},
{0,3,5,1,6,2,4},
{0,3,6,5,2,1,4},
{0,5,3,6,1,4,2},
{0,6,3,2,5,4,1},
{0,2,3,1,6,4,5},
{0,1,3,5,2,4,6},
{0,1,2,3,4,5,6},
{0,5,1,3,4,6,2},
{0,6,5,3,4,2,1},
{0,2,6,3,4,1,5},
{0,6,2,4,3,5,1},
{0,2,1,4,3,6,5},
{0,1,5,4,3,2,6},
{0,5,6,4,3,1,2},
{0,2,4,6,1,3,5},
{0,1,4,2,5,3,6},
{0,5,4,1,6,3,2},
{0,6,4,5,2,3,1},
{0,4,5,6,1,2,3},
{0,4,6,2,5,1,3},
{0,4,2,1,6,5,3},
{0,4,1,5,2,6,3},
};
int n,i,j,l;
int ans;
void fresh()
{int p=0,rex,i,j;int cnt[25];rep(i,1,6){rep(j,0,24) cnt[j]=0;rex=0;rep(j,1,n){cnt[a[j][d[r[j]][i]]]++;rex=max(rex,cnt[a[j][d[r[j]][i]]]);}p+=n-rex;}ans=min(ans,p);
}
void dfs(int dep)
{int i;if (dep==n+1)fresh();elserep(i,1,24){r[dep]=i;dfs(dep+1);}
}
int main()
{while (1){scanf("%d",&n);ans=2147483647;if (n==0) break;p.clear();l=0;rep(i,1,n)rep(j,1,6){scanf("%s",&c);if (!p[c]){l++;p[c]=l;}a[i][j]=p[c];}r[1]=1;dfs(2);printf("%d\n",ans);}
}

[DFS][打表]染色的立方体相关推荐

  1. HDU 2563 统计问题 (DFS + 打表)

    统计问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. Covering(dfs打表+高斯消元+矩阵快速幂)

    传送门 这是个递推题,可以看下维基的各种解释:传送门 假设递推式是一个四元方程,至于为什么也不大清楚(可能是操场是4*n的缘故) 然后得到递推式f(n)=f(n-1)+5*f(n-2)+f(n-3)- ...

  3. leetcode785. 判断二分图(dfs和bfs染色)

    给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图 ...

  4. 变异蛮牛 树,dfs,二分图染色 牛客白月赛44

    链接:https://ac.nowcoder.com/acm/contest/11221/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52 ...

  5. 2019ICPC(上海) - Counting Sequences I(dfs打表)

    题目链接:点击查看 题目大意:对于n>1,求的长度为n的数组个数 题目分析:因为长度为n的数组中,组成数字相同但排列组合不同的数组,不算同一种情况,所以我们在求出一种满足条件的数组后,需要考虑所 ...

  6. 悼念512汶川大地震遇难同胞——来生一起走(dfs+打表)

    题意:5可以有两种 2 3, 5.质数之和 因为23 32是重复的 由于数据小, 如果数据小于100,连打表都不用 #include<bits/stdc++.h> using namesp ...

  7. 【CodeForces - 244B】Undoubtedly Lucky Numbers (dfs打表 + 二分)

    题干: Polycarpus loves lucky numbers. Everybody knows that lucky numbers are positive integers, whose ...

  8. Harmonious Rectangle(dfs 打表)

    题意: 问有多少个n*m的012矩阵,存在至少一组(x1,x2)(y1,y1)(x1,x2)(y1,y1)(x1,x2)(y1,y1)使得4个点(x1,y1)(x1,y2)(x2,y1)(x2,y2) ...

  9. 小白算法练习 NYOJ 吝啬的国度 dfs+邻接表

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

最新文章

  1. 已解决:CentOS 7安装Docker Compose
  2. Eclipse编程快捷键
  3. 方立勋_30天掌握JavaWeb_国际化开发
  4. Android深入源代码分析理解Aidl总体调用流程(雷惊风)
  5. 2006的最后一篇之学车大结局
  6. 今天开始要详细的记录学习sharepoint 的进度和相关的一些资料
  7. python 线性回归 约束_python – Tensorflow:具有非负约束的线性回归
  8. 休宁天气预报软件测试,【休宁天气预报】休宁今天天气预报 - 天气史
  9. 康熙字典收录多少汉字_《康熙字典》一共有多少个字
  10. 打卡1 谭浩强c语言程序设计第三章
  11. 软件工程基础作业 可行性与需求分析
  12. 计算机cpu操作ppt,CPU基础知识PPT课件
  13. mappedBy reference an unknown target entity property解决方法
  14. 歌评-《Rex Incognito 尘世闲游》-陈致逸
  15. preHandle执行多次问题
  16. 物质社会会变成巨大的神经,这颗星球将会成一颗会思考的大脑
  17. python获取cpu温度_Python如何读取CPU和GPU的温度?
  18. 王烁-《30天投资训练营.2020》01.投资六忌:读后感
  19. php服务器默认首页,如何修改Apache服务器的默认首页?
  20. Fidder使用工具介绍-1

热门文章

  1. d3js 实现水球图
  2. Dagger2 依赖注入之@Provides 分析
  3. HDU-4510-日期
  4. win7 系统增加自定义分辨率_【文献转载】GT5000便携式多参数土壤呼吸测量系统用于棉花田间土壤二氧化碳释放量的测量...
  5. 网络基础——综合布线
  6. idea build非常慢build artifacts非常慢的问题,检查是否存在target 多层嵌套问题
  7. 实战:3种方式安装Jenkins-2022.4.17(博客分享)
  8. Linux内核分析 笔记二 操作系统是如何工作的 ——by王玥
  9. 关于旅行商,哈密顿回路和NP问题的科普
  10. 互联网之父:语义Web技术已具备成功标准