/*
这题说的的是 N 维的坐标, 每个盒子的N维坐标 可以进行 随意方式的调换
然后求出 A全部的坐标小于B的 则 A 可以嵌套在B中 然后 计算出最多的 盒子嵌套个数
简单的状态转移 我为何如此的弱
*/
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
using namespace std;
const int maxn=35;
const int maxm=15;
int N[maxn][maxm];
int dp[maxn];
int lis,mlis,n,m,per[maxn];
bool mark[maxn][maxn];
stack<int>TT;
bool jud(int a,int b){
int f=0;
for(int i=0;i<m;i++)
if(N[a][i]<=N[b][i])
{ f=1; break; }
if(f) return false;
return true;
}
int main()
{ while(scanf("%d%d",&n,&m)==2){
per[0]=lis=0;
dp[0]=1;
for(int i=1;i<=n;i++) {
dp[i]=1; per[i]=0;
}
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++)
scanf("%d",&N[i][j]);
sort(N[i],N[i]+m);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mark[i][j]=jud(i,j);
for(int k=0;k<n;k++)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
if(i!=j&&mark[i][j]&&dp[i]<dp[j]+1){
dp[i]=dp[j]+1;
per[i]=j;
}
if(dp[i]>lis){
lis=dp[i];
mlis=i;
}
}
printf("%d\n",lis);
TT.push(mlis);
int jj;
while(1){ jj=per[mlis];if(jj==0) break;TT.push(jj);mlis=jj; }
jj=TT.top();TT.pop();
printf("%d",jj);
while(!TT.empty()){ jj=TT.top();TT.pop();printf(" %d",jj); }
printf("\n");
}
return 0;
}

UVA 103的更多相关文章

  1. UVa 103 Stacking Boxes --- DAG上的动态规划

    UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...

  2. UVa 103 - Stacking Boxes (LIS,打印路径)

    链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn},  对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...

  3. UVA 103 Stacking Boxes n维最长上升子序列

    题目链接:UVA - 103 题意:现有k个箱子,每个箱子可以用n维向量表示.如果一个箱子的n维向量均比另一个箱子的n维向量大,那么它们可以套接在一起,每个箱子的n维向量可以互相交换值,如箱子(2,6 ...

  4. UVa 103 - Stacking Boxes(dp求解)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  5. uva 103 Stacking Boxes(DAG)

    题目连接:103 - Stacking Boxes 题目大意:有n个w维立体, 输出立体互相嵌套的层数的最大值, 并输出嵌套方式, 可嵌套的要求是外层立体的w条边可以分别对应大于内层立体. 解题思路: ...

  6. UVA 103 Stacking Boxes --LIS

    实际上是一个扩展维度的矩形嵌套问题. 一个物体能嵌入另一个物体中,当且仅当这个物体的所有维度的长度都小于另外一个(本题是小于等于),又因为可以旋转等变换,所以干脆将每个箱子的边从小到大排序,以便于判断 ...

  7. UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索

    题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...

  8. UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)

     Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simple in one or t ...

  9. UVa 103 - Stacking Boxes

    题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...

  10. uva 103(最长递增子序列) Stacking Boxes

    大意是有一些n维的物体,他的边也是n条,如果将一个物体的边按任意顺序排列,只要有一种排列满足一一对应小于另一物体的边,就可以将这个物体嵌套进去另一个物体中,文最多能连续嵌套几个物体. 所求的最多的连续 ...

随机推荐

  1. OpenMax概述

    一.OpenMax简介 OpenMAX是一个多媒体应用程序的标准.由NVIDIA公司和Khronos™在2006年推出. 它是无授权费的.跨平台的C语言程序接口序列,这些接口对音频.视频.静态图片的常 ...

  2. 为什么局域网里有ip为10.10.10.1

    10.0.0.1 是私有地址,用来给局域网络分配主机地址的. A类地址 (1)A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. (2)A类地址网络号范围:1.0.0 ...

  3. 【BZOJ3328】PYXFIB 数论+矩阵乘法

    [BZOJ3328]PYXFIB Description Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sampl ...

  4. Ios8 Xcode6 设置Launch Image 启动图片

    http://blog.sina.com.cn/s/blog_6c97abf10102voui.html Http://Www.woowen.com/Swift/2014/12/12/Ios8设置La ...

  5. yii---where该如何使用

    简单示例yii 的where使用方法: $where = ['post_id'=>$postId]; //$list = ForumThreadPost::find()->where($w ...

  6. ImageGrab.grab()全屏抓取错误

    前几天看见知乎上的连连看外挂就想着自己试一下 但是搞了半天发现截取全屏的图片就出现了问题 截取的图片其实只有屏幕左上角的一部分 大概就这样: 用的是PIL  ImageGrab里的grab函数 没加参 ...

  7. POJ 2987 - Firing - [最大权闭合子图]

    题目链接:http://poj.org/problem?id=2987 Time Limit: 5000MS Memory Limit: 131072K Description You’ve fina ...

  8. [No00004F]史上最全Vim快捷键键位图(入门到进阶)vim常用命令总结

    在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...

  9. Code--POJ1850

    Description Transmitting and memorizing information is a task that requires different coding systems ...

  10. mysql 内置功能 视图 使用

    #语法:CREATE VIEW 视图名称 AS SQL语句 增加了一张表 mysql> create view course2teacher as select * from course in ...