uva 103 Stacking Boxes(DAG)
题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体。
解题思路:可以将每个立体的w边安照从小到大排序, 比较的时候逐一比较就可以判断出可否嵌套, 然后就是纯DAG问题了。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int N = 50; int n, w, dp[N], vis[N], seq[N][N]; void Init() {
memset(dp, 0, sizeof(dp));
memset(vis, 0, sizeof(vis));
memset(seq, 0, sizeof(seq));
} void read() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < w; j++)
scanf("%d", &seq[i][j]);
sort(seq[i], seq[i] + w);
}
} bool judge(int a, int b) {
for (int i = 0; i < w; i++)
if(seq[a][i] <= seq[b][i]) return false;
return true;
} int find(int d) {
if (dp[d]) return dp[d]; for (int i = 0; i < n; i++) {
if (judge(i, d)) {
int a = find(i);
if (a > dp[d]) {
dp[d] = a;
vis[d] = i;
}
}
}
return ++ dp[d];
} void solve() {
int Max = 0, id, a;
for (int i = 0; i < n; i++) {
a = find(i);
if (a > Max) {
Max = a;
id = i;
}
}
printf("%d\n", Max);
for (int i = 1; i < Max; i++) {
printf("%d ", id + 1);
id = vis[id];
}
printf("%d\n", id + 1);
} int main() {
while (scanf("%d%d", &n, &w) == 2) {
Init();
read();
solve();
}
return 0;
}
uva 103 Stacking Boxes(DAG)的更多相关文章
- UVa 103 - Stacking Boxes(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
Stacking Boxes Background Some concepts in Mathematics and Computer Science are simple in one or t ...
- UVa 103 Stacking Boxes --- DAG上的动态规划
UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...
- UVA 103 Stacking Boxes n维最长上升子序列
题目链接:UVA - 103 题意:现有k个箱子,每个箱子可以用n维向量表示.如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6 ...
- UVa 103 - Stacking Boxes (LIS,打印路径)
链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn}, 对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...
- uva 103 Stacking Boxes(最长上升子序列)
Description Stacking Boxes Background Some concepts in Mathematics and Computer Science are simp ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- UVA 103 Stacking Boxes --LIS
实际上是一个扩展维度的矩形嵌套问题. 一个物体能嵌入另一个物体中,当且仅当这个物体的所有维度的长度都小于另外一个(本题是小于等于),又因为可以旋转等变换,所以干脆将每个箱子的边从小到大排序,以便于判断 ...
- UVa 103 - Stacking Boxes
题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...
随机推荐
- Linux 下如何安装软件?
http://zhidao.baidu.com/link?url=OkQCOZtVMXhasC8x9zFTZOumsFKf0WW25Ckr2wBF1xO08EsjrBpnMaTBlIAUYdxZ408 ...
- 7-05. 魔法优惠券(25) (数学 ZJU_PAT)
题目链接:http://www.patest.cn/contests/ds/7-05 在火星上有个魔法商店,提供魔法优惠券.每一个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵.能够 ...
- 使用bat批处理命令打包maven项目
使用批处理命令打包java项目,给我们发布war或jar包带来了很大的便利,附上代码,以作留存. ::huap-parent ::common-parent ::market-parent ::cus ...
- xml、txt、config的一些基本用法
先来测试一下xml的读取好了创建了一个student.xml的文件 <?xml version="1.0" encoding="UTF-8"?> & ...
- Oracle运维 专业的事情交给专业的人来做
关于Oracle运维的重要性,随便写了几句,放在这儿和大家共勉. Oracle数据库在RDBMS中独占熬头,07年统计其市场份额占关系数据库市场的48.6%稳居首位,而且逐年增加,上升势头强劲.在使用 ...
- mysql和VS2010 C++链接过程中出现的问题
PS:二者连接的过程主要参考这篇博客园文章,http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html 这篇博客园的文章中的代 ...
- 二.ubuntu14.04 3D特效设置
一.如果按照第一篇都设置好了(显卡驱动等都已经正常),然后 1.安装CCSM设置管理器 用鼠标点击屏幕左侧Unity程序启动栏中的“Ubuntu软件中心”(有“A”字形的公文包图标), 在弹出的“Ub ...
- android 转帖留链接
Android开发:用Drawable XML绘制带阴影效果的圆形按钮 http://evis.me/2013/05/android-dev-render-button-with-s ...
- box-shadow 给图片添加内部阴影
box-shadow 是css3中定义的设置元素阴影的属性,其语法结构如下: <shadow> = inset? && <length>{2,4} && ...
- 创建style和修改style
1.创建style 在res/values/styles.xml中设置style 根元素<resource> 子元素:<style> 属性:name:样式的名称 parent: ...