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 ...
随机推荐
- iscroll5 版本下的 上拉,下拉 加载数据
上拉时候只是加载第一页的内容,可根据实际情况修改其中的代码. <section id="downwraper" class="nodeBottom bot0 bgf ...
- matlab---边缘之sobel简单实例
最近在项目中需要做一些图像边缘检测的工作,但是由于之前没接触过图像处理的相关知识,所以只得 在matlab里面对一些图像处理函数挨个挨个的试着用.在用的过程中在慢慢的明白了一些简单的图像处 理方法. ...
- poj 2425 A Chess Game_sg函数
题意:给你一个有向无环图,再给你图上的棋子,每人每次只能移动一个棋子,当轮到你不能移动棋子是就输了,棋子可以同时在一个点 比赛时就差这题没ak,做了几天博弈终于搞懂了. #include <io ...
- 每日一dp(2)——龟兔赛跑(hdu 2059)
比較经典的动态规划的题目了 一般动态规划的想法都是先推断是否有最优子结构,无后效性.接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算 难点:转移方程,其一般也难在怎样描写叙述一个 ...
- 【JSON异常系列】new JSONObject对象时卡死原因
8:47 2015/7/11 昨天晚上在使用JSON时,在创建JSONObject对象的时候不报错也不抛出异常.但就是new 不出来JSONObject的对象,这是一个非常奇葩的现象. 最后才发现原来 ...
- DB2 runstats和reorg操作
[db2inst1@xifenfei ~]$ db2 connect to xff Database Connection Information Database server ...
- Fiddler使用教程(收藏)
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...
- Android Studio代码自动提示无效
不生效的原因是因为你AS设置成了省电模式,设置成省电模式了的话,AS会禁掉一些辅助功能,达到省电的目的.所以代码自动提示也被禁掉了. 要修改回来的话,通过File选项,然后倒数第二项:Power Sa ...
- ssh框架搭建时报错
java.lang.UnsupportedClassVersionError: com/microsoft/ sqllserver/ jdbc/SQLServerDriver : Unsupport ...
- 查看 并发请求数及其TCP连接状态
服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...