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可嵌套在盒子 ...
随机推荐
- Memory Leak(内存泄漏)问题总结(转)
最近听了一些关于Memory Leak(内存泄漏)的seminar,感觉有些收获,所以留个记录,并share给朋友. 1 什么是Memory Leak. Memory Leak是指由于错误或不完备的代 ...
- LINUX下DNS的查看和配置
linux下好像没有专门的DNS查看命令. 用ifconfig命令也是看不到DNS的信息.(也可能是我不知道) 本机的DNS配置信息是在:/etc/resolv.conf [root@localhos ...
- Opencv下图像对鼠标事件的响应
直接上代码: //////////////////////////////////////////////////////////////////////// // // 该程序从文件中读入一幅图像, ...
- JSP指令 include 和forward
包括指令:include 静态包括 <%@include file="要包括的文件路径" %> 先将所包括 ...
- MySql命令行命令和SQL语句
一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...
- input的样式简介
<input type="text" autocomplete="off" placeholder="" x-webkit-speec ...
- JBOSS javax.naming.NameNotFoundException: xxx not bound
当出现JOBSS部署EJB xxx not bound 请查看ejb.jar 是否打包完全正常,是不是缺配置文件,一般是缺少配置文件或者打包不正确.
- linux 中ls命令函数
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h> ...
- 网站建设之Django搭建与配置
总是忘记一些问题解决的细节,终于发现做笔记的必要了.一步一步慢慢写,慢慢积累吧.从开始接触计算机,从硬件到系统到软件,遇到的问题真心不算少了,都记下来的话也得有本书厚了. Linux Version: ...
- 移动端h5摇一摇事件
// 摇一摇动作 //获取加速度信息 //通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,进行设备是否有进行晃动的判断. //而为了防止正常移动的误判,需要给该变化率设置一个合适的临 ...