UVa 103 - Stacking Boxes (LIS,打印路径)
题意:给n维图形,它们的边长是{d1,d2,d3...dn}, 对于两个n维图形,求满足当中一个的全部边长
依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打印随意一个最长子串的路径,
比如:a(9,5,7,3),b(6,10,8,2),c(9,7,5,1),a和b不满足,但c和b满足
分析:首先对没组边长从小到大排序,再对各组图形按最小边排序,再求最大子串,
对于打印路径,能够逆序循环,也可递归求解
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[35],path[35],num,m,k;
struct stu
{
int a[12],id;
}s[35];
int cmp(struct stu s1,struct stu s2)
{
return s1.a[1]<s2.a[1];
}
/*void back_path1(int i)
{
if(path[i]!=i)
back_path1(path[i]);
printf("%d",s[i].id);
num++;
if(num!=m)
printf(" ");
else
printf("\n");
}*/
/*void back_path2(int i)
{
if(k--){
back_path2(path[i]);
printf("%d",s[i].id);
num++;
if(num!=m)
printf(" ");
else
printf("\n");
}
}*/
int main()
{
int i,j,n,pos,b[1005];
while(scanf("%d%d",&m,&n)!=EOF){
for(i=1;i<=m;i++){
s[i].id=i;
for(j=1;j<=n;j++)
scanf("%d",&s[i].a[j]);
sort(s[i].a+1,s[i].a+n+1); //对每一个图形的边长排序
}
sort(s+1,s+m+1,cmp); //对各个图形之间,按最小边长的大小排序
for(i=1;i<=m;i++){
dp[i]=1;
path[i]=i;
for(j=1;j<i;j++){
for(k=1;k<=n;k++)
if(s[j].a[k]>=s[i].a[k])
break;
if(k==n+1&&dp[j]+1>dp[i]){
dp[i]=dp[j]+1;
path[i]=j;
}
}
}
pos=1;
for(i=2;i<=m;i++)
if(dp[i]>dp[pos])
pos=i;
m=dp[pos];
printf("%d\n",m);
b[1]=s[pos].id; //先把最后一个编号增加
i=2;
for(j=pos-1;j>=1;j--){ //逆序循环求路径
for(k=1;k<=n;k++)
if(s[j].a[k]>=s[pos].a[k])
break;
if(k==n+1&&dp[j]+1==dp[pos]){
b[i++]=s[j].id;
dp[pos]--;
}
if(dp[pos]==1)
break;
}
for(j=i-1;j>1;j--)
printf("%d ",b[j]);
printf("%d\n",b[1]);
/*num=0; //递归方法1
back_path1(pos);*/
/*num=0; //递归方法2
k=m;
back_path2(pos);*/
}
return 0;
}
UVa 103 - Stacking Boxes (LIS,打印路径)的更多相关文章
- UVA 103 Stacking Boxes --LIS
实际上是一个扩展维度的矩形嵌套问题. 一个物体能嵌入另一个物体中,当且仅当这个物体的所有维度的长度都小于另外一个(本题是小于等于),又因为可以旋转等变换,所以干脆将每个箱子的边从小到大排序,以便于判断 ...
- UVa 103 Stacking Boxes --- DAG上的动态规划
UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...
- uva 103 Stacking Boxes(DAG)
题目连接:103 - Stacking Boxes 题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体. 解题思路: ...
- 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(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVa 103 - Stacking Boxes
题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...
- uva 103 Stacking Boxes(最长上升子序列)
Description Stacking Boxes Background Some concepts in Mathematics and Computer Science are simp ...
- UVA 103 Stacking Boxes n维最长上升子序列
题目链接:UVA - 103 题意:现有k个箱子,每个箱子可以用n维向量表示.如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6 ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
随机推荐
- Swift - 创建代理协议实现页面间参数传递和方法调用
在开发中,经常需要用到协议代理模式.比如,进入编辑页面修改数据后,将新数据回传到主界面. 下面通过一个样例来说明协议代理模式,功能如下: 1,主页面有一个标签和一个修改按钮,点击修改按钮会跳转到编辑页 ...
- MOCKITO 应用示例
package com.paic.wms.service.auditflow.impl; import static org.junit.Assert.*; import java.util.Arra ...
- 怎样从ext3升级到ext4?
Ext4 文件系统提供了更佳的性能和可靠性,具有了更为丰富的功能,那么,怎样从ext3升级到ext4呢? 首先,我们须要保证系统支持ext4,一般来说,内核版本号在2.6.28及以上的版本号才支持ex ...
- java entry
我希望要一个ArrayList<Entry>,类似C++中的pair, 可是Map.Entry是个接口,不能实例化,能够像以下这样写 HashMap<Integer, Integer ...
- JSCapture实现屏幕捕捉
JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库. 能够随意在浏览器或者桌面视频进行截图, JSCapture 使用 getUserMedia 来实现屏幕捕获. 当前 ...
- 如何下载和编译Android4.0内核源代码goldfish(图像)
如何下载Android4.0源代码.请参阅我的博客文章中有(同样是图文教程): http://blog.csdn.net/flydream0/article/details/7036156 怎样编译A ...
- WM_CLOSE、WM_DESTROY、WM_QUIT学习总结(点击关闭按钮会触发WM_CLOSE消息,DestroyWindow API会触发WM_DESTROY和WM_NCDESTROY消息,MSDN上写的很清楚)
WM_CLOSE:关闭应用程序窗口 WM_DESTROY:关闭应用程序 WM_QUIT:关闭消息循环 只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失). win32应用程序的完整退出 ...
- thinkphp3.2入口文件
原文:thinkphp3.2入口文件 <?php define('DIR_SECURE_FILENAME', 'default.html');//错误页面 define('APP_PATH',' ...
- libuv 与 libev 的对比
libuv 与 libev 的对比 libuv 与 libev 的对比 05 January 2013 libuv 和 libev ,两个名字相当相近的 I/O Library,最近有幸用两个 Lib ...
- CI(codeigniter)框架,routes.php设置正确,但是显示服务器错误,是__construct少写了一个下划线
今天弄了一下CI框架,大概看了一下文档,感觉CI框架非常精简,但是在做的时候遇到了问题,CI文档中提供了一个新闻系统的例子,所有工作都做完了,在浏览器中打开相对应的url是,却显示“服务器错误”,一点 ...