2741 -- Colored Cubes

  十分好的一个暴力枚举题,题意是,给出最多4个筛子,每个面都有一个颜色标记,要求求出最少改变多少个面,使得这些筛子可以通过某些旋转使其完全相同。

  刚接到这题的时候,有点老鼠拉龟的感觉,首先想到的居然是dp。。。然后细心一想,这个题最多才4个筛子,何不直接暴力枚举呢?枚举复杂度最多才到O(24^n),因为筛子一共有24种放置的方法。然后一个问题就来了,这24种状态要怎么搞出来?一个不小心错了一个数字就很难debug 的了。于是,我在草稿纸上写了前面是1的4种情况,然后发现其余的,前面是2~6的各自的4种情况都是一样的转换方式,所以之后的直接利用转换即刻得到,具体查看代码。

  最后套上一个dfs就大功告成了!

View Code

 1 const int base[6][6] = { {0, 1, 2, 3, 4, 5}, {1, 0, 3, 2, 5, 4},
 2                    {2, 0, 1, 4, 5, 3}, {3, 0, 4, 1, 5, 2},
 3                    {4, 0, 2, 3, 5, 1}, {5, 1, 3, 2, 4, 0}};
 4 const int convert[4][6] = { {0, 1, 2, 3, 4, 5}, {0, 2, 4, 1, 3, 5},
 5                       {0, 4, 3, 2, 1, 5}, {0, 3, 1, 4, 2, 5}};
 6
 7 void getDice(int n, int *dice) {
 8     int x = n >> 2, y = n & 3;
 9     REP(i, 6) dice[i] = base[x][convert[y][i]];
10 }
11
12 int st[4][6], mini, curID, dice[4][6];
13 map<string, int> id;
14
15 int getID(char *s) {
16     return id.find(s) == id.end() ? id[s] = curID++ : id[s];
17 }
18
19 void input(int n) {
20     char buf[25];
21     curID = 0;
22     id.clear();
23     REP(i, n) REP(j, 6) {
24         scanf("%s", buf);
25         dice[i][j] = getID(buf);
26     }
27 }
28
29 int stat[24];
30
31 int cal(int n) {
32     int ret = 0;
33     REP(i, 6) {
34         int mx = 0;
35         _clr(stat);
36         REP(j, n) {
37             stat[dice[j][st[j][i]]]++;
38             mx = max(mx, stat[dice[j][st[j][i]]]);
39         }
40         ret += n - mx;
41         if (ret >= mini) return inf;
42     }
43     return ret;
44 }
45
46 void dfs(int n, int p) {
47     if (p >= n) {
48         mini = min(mini, cal(n));
49         return ;
50     }
51     REP(i, 24) {
52         getDice(i, st[p]);
53         dfs(n, p + 1);
54     }
55 }
56
57 int work(int n) {
58     mini = inf;
59     getDice(0, st[0]);
60     dfs(n, 1);
61     return mini;
62 }
63
64 int main() {
65 //    freopen("in", "r", stdin);
66     int n;
67     while (~scanf("%d", &n) && n) {
68         input(n);
69         printf("%d\n", work(n));
70     }
71     return 0;
72 }

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/archive/2013/02/10/poj_2741_Lyon.html

poj 2741 Colored Cubes(dfs暴力枚举)相关推荐

  1. POJ - 4048 Chinese Repeating Crossbow 暴力枚举+线段香蕉?

    题目链接:点击查看 题意:从一给出的点出发可以向任意方向发出射线,然后现在平面上共有1500条线段,问最多能使射线和几条线段相交 题解:每个线段都有一个对应的角度范围,刚开始想的是离散化一下,求一下哪 ...

  2. 【搜索】Playoff (dfs暴力枚举+剪枝)

    题目描述 The Minato Mirai Football Association hosts its annual championship as a single round-robin tou ...

  3. YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

    文章目录 题目描述 解析 代码 题目描述 解析 没有想出来 首先可以确定开关要么开一次,要么不动,其他都和这俩是等价的 一开始最先想到的就是贪心的方法,每个开关遍历,如果按下会使答案变好就按下. 但是 ...

  4. 暴力枚举(字符串匹配)-Blue Jeans POJ - 3080

    暴力枚举(字符串匹配)-Blue Jeans POJ - 3080 题目: Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的 ...

  5. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  6. 【POJ - 2965】The Pilots Brothers' refrigerator(暴力枚举,思维)

    题干: The game "The Pilots Brothers: following the stripy elephant" has a quest where a play ...

  7. codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]

    A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...

  8. POJ 2429 GCD LCM Inverse ★(pollard-ρ DFS枚举)

    题目链接:http://poj.org/problem?id=2429 题目大意:给定gcd(a,b)和lcm(a,b)(<2^63),求a和b,如果有多种情况,输出和最小的情况.   首先gc ...

  9. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  10. 新手入门刷题(专题三)暴力枚举

    新手入门刷题(专题三)暴力枚举--->持续更新 4.14 统计方形(数据加强版) 题目描述 有一个 n×m 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 输入格式 一行,两个正整 ...

最新文章

  1. change python是什么意思_回溯是什么意思?
  2. Android --- 调用MediaStore.Images.Media.insertImage保存图片时生成两张图片的问题
  3. JDK、TOMCAT、Ant环境变量设置
  4. SqlConnection中 Close()Dispose()Using()的区别
  5. 将Mac OS X从Snow Leopard升级到Mountain Lion
  6. mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException
  7. ViewPager中Fragment的重复创建、复用问题
  8. GitHub 引入缺陷和Pull Request 模版,并支持直接上传文件
  9. MySQL Shell 教程
  10. 共阳极管的代码_《手把手教你学FPGA》第三章设计实例
  11. 儿童电子产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 基于QT和DCMTK的Dicom 图像浏览器---目录
  13. Spring Boot 接入支付宝完整流程实战,看完后秒懂!
  14. W3C CSS验证方法
  15. aecc2019能装saber吗_【2018年10月重磅】After Effects CC2019 分享新功能介绍
  16. windows10系统设置选项里没有触摸板选项
  17. 【参赛作品37】openGauss/MogDB数据库函数创建的两种风格
  18. NOIP 2012 Senior 2 - 国王游戏
  19. Docker的上手(Ubuntu140.4 Mate)
  20. Excel中VBA编程学习笔记(一)

热门文章

  1. SQL Server 2008 Mirror
  2. ASP 中健壮的页结构的异常处理
  3. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)
  4. PHP 抽象工厂模式(Kit模式)
  5. [C#源码] 微信跳一跳POST修改分数漏洞
  6. 转移 AD Time Server
  7. 蚂蚁分类信息系统5.8 解决手机端新闻详情页面图片不自动缩放问题
  8. 一位36岁程序员的困惑(转)
  9. PHP(四)运算符、表达式和语句
  10. Atitit.分区对索引的影响 分区索引和全局索引 attilax总结