uva 10051 Tower of Cubes(DAG最长路)
题目大意:有n个正方体,从序号1~n, 对应的每个立方体的6个面分别有它的颜色(用数字给出),现在想要将立方体堆成塔,并且上面的立方体的序号要小于下面立方体的序号,相邻的面颜色必须相同。输出最高值和路径。
解题思路:因为立方体可以旋转,所以一个序号的立方体对应这6种不同的摆放方式,可以将问题理解成DAG最长路问题, 只是搜索范围是从i + 1开始到n。然后记录路径要开两个2维数组。
路径不唯一,随便输出一条。
- #include <stdio.h>
- #include <string.h>
- const int N = 1005;
- const int M = 10;
- const char sign[M][10]= {"front", "back", "left", "right", "top", "bottom"};
- struct state {
- int in;
- int out;
- }tmp[N][M];
- int n, x[N][M], y[N][M], dp[N][M];
- void Init() {
- memset(tmp, 0, sizeof(tmp));
- memset(dp, 0, sizeof(dp));
- memset(x, 0, sizeof(x));
- memset(y, 0, sizeof(y));
- }
- void write(int k, int a, int b, int d) {
- tmp[d][k].in = a;
- tmp[d][k].out = b;
- }
- void read() {
- int a, b;
- for (int i = 1; i <= n; i++) {
- for (int j = 0; j < 3; j++) {
- scanf("%d%d", &a, &b);
- write(j * 2, a, b, i);
- write(j * 2 + 1, b, a, i);
- }
- }
- }
- int search(int d, int k) {
- if (dp[d][k]) return dp[d][k];
- for (int i = d + 1; i <= n; i++) {
- for (int j = 0; j < 6; j++) {
- if (tmp[i][j].in == tmp[d][k].out) {
- int a = search(i, j);
- if (a > dp[d][k]) {
- dp[d][k] = a;
- x[d][k] = i, y[d][k] = j;
- }
- }
- }
- }
- return ++dp[d][k];
- }
- void solve() {
- int Max = 0, idx, idy, a;
- for (int i = 1; i <= n; i++) {
- if (Max + i >= n) break;
- for (int j = 0; j < 6; j++) {
- a = search(i, j);
- if (a > Max) {
- Max = a;
- idx = i, idy = j;
- }
- }
- }
- printf("%d\n", Max);
- for (int i = 0; i < Max; i++) {
- printf("%d %s\n", idx, sign[idy]);
- a = idx;
- idx = x[idx][idy];
- idy = y[a][idy];
- }
- /*
- printf("%d\n", dp[1][5]);
- idx = 1; idy = 5;
- for (int i = 0; idx; i++) {
- printf("%d %s\n", idx, sign[idy]);
- a = idx;
- idx = x[idx][idy];
- idy = y[a][idy];
- }
- */
- }
- int main() {
- int cas = 0;
- while (scanf("%d", &n), n) {
- Init();
- read();
- if (cas) printf("\n");
- printf("Case #%d\n", ++cas);
- solve();
- }
- return 0;
- }
uva 10051 Tower of Cubes(DAG最长路)的更多相关文章
- uva 10131 Is Bigger Smarter?(DAG最长路)
题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...
- 简单Dp----最长公共子序列,DAG最长路,简单区间DP等
/* uva 111 * 题意: * 顺序有变化的最长公共子序列: * 模板: */ #include<iostream> #include<cstdio> #include& ...
- NYOJ16 矩形嵌套(DAG最长路)
矩形嵌套 紫书P262 这是有向无环图DAG(Directed Acyclic Graph)上的动态规划,是DAG最长路问题 [题目链接]NYOJ16-矩形嵌套 [题目类型]DAG上的dp & ...
- 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)
「BZOJ1924」[SDOI2010] 所驼门王的宝藏 tarjan + dp(DAG 最长路) -------------------------------------------------- ...
- BZOJ 5450 轰炸 (强连通缩点+DAG最长路)
<题目链接> 题目大意: 有n座城市,城市之间建立了m条有向的地下通道.你需要发起若干轮轰炸,每轮可以轰炸任意多个城市.但每次轰炸的城市中,不能存在两个不同的城市i,j满足可以通过地道从城 ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- The Largest Clique UVA - 11324( 强连通分量 + dp最长路)
这题 我刚开始想的是 缩点后 求出入度和出度为0 的点 然后统计个数 用总个数 减去 然而 这样是不可以的 画个图就明白了... 如果 减去度为0的点 那么最后如果出现这样的情况是不可 ...
- 02_嵌套矩形(DAG最长路问题)
来源:刘汝佳<算法竞赛入门经典--训练指南> P60 问题2: 问题描述:有n个矩形,每个矩形可以用两个整数a,b描述,表示它们的长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中的条件 ...
- BZOJ1093 [ZJOI2007]最大半连通子图 【tarjan缩点 + DAG最长路计数】
题目 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G ...
随机推荐
- 【测试Json的多空格问题】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Silverlight中的拖拽实现的图片上传
原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...
- ISSkin Pack 3.0 (含预览程序 ISSkinViewer)
原文 http://restools.hanzify.org/article.asp?id=108 包含 250 款皮肤, 预览程序纯粹的由Inno Setup脚本写成. 足以展示Inno Setup ...
- poj 1887 Testing the CATCHER_最长上升子序列
题意:题目太长没看,直接看输入输出猜出是最长下降子序列 用了以前的代码直接a了,做法类似贪心,把最小的顺序数存在数组里面,每次二分更新数组得出最长上升子序列 #include<iostream& ...
- Makefile中使用$$的使用
http://blog.csdn.net/darennet/article/details/8185881 Makefile中使用$$的使用 在makefile中,会经常使用shell ...
- jquery选择器从认识到使用初级篇
1. .class 选择器 ---一种通过元素类别属性查找元素 调用格式: $(".class") ----其中参数表示元素的css类别名称(类选择器)<input cl ...
- 《JavaScript 闯关记》之简介
简介 JavaScript 是面向 Web 的编程语言,绝大多数现代网站都使用了 JavaScript,并且所有的现代 Web 浏览器(电脑,手机,平板)均包含了 JavaScript 解释器. 这使 ...
- java调用Command命令
----------- import java.io.BufferedReader; import java.io.InputStreamReader; /** * 此类用来执行Command命令 * ...
- IIS Could not load file or assembly 'CLDBCommon.DLL' or one of its dependencies.找不到指定的模块
1.卸载原来的.NET4.0,从新下载.NET4.5.1完整安装程序.后问题解决附:.NET4.5.1下载地址:https://www.microsoft.com/zh-cn/download/det ...
- Oracle数据库运维优化六脉神剑口诀
我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...