uva 103(最长递增子序列) Stacking Boxes
大意是有一些n维的物体,他的边也是n条,如果将一个物体的边按任意顺序排列,只要有一种排列满足一一对应小于另一物体的边,就可以将这个物体嵌套进去另一个物体中,文最多能连续嵌套几个物体。
所求的最多的连续嵌套数与最长递增子序列相似,只不过一般的是单个数的比较,这里是一列数的比较。还有就是满足条件的嵌套的物体的编号用递归来求。
还可以记忆化搜索.
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int n,m,dp[],s[];
bool vis[][]; struct node{
int num[];
int odr;
friend bool operator <(const node & x,const node & y) {
for (int i= ; i<=m ; i++)
if (x.num[i]>y.num[i]) return false;
return true;
}
}a[]; bool jjc(int x,int y)
{
for (int i= ; i<=m ; i++)
if (a[x].num[i]>=a[y].num[i]) return false;
return true;
} void dfs(int i){
if (i!=s[i]) dfs(s[i]);
printf("%d ",a[i].odr);
} int main()
{
while (~scanf("%d%d",&n,&m))
{
for (int i= ; i<=n ; i++){
for (int j= ; j<=m ; j++){
scanf("%d",&a[i].num[j]);
}
a[i].odr=i;
sort(a[i].num+,a[i].num+m+);
}
sort(a+,a+n+);
memset(vis,false,sizeof(vis));
for (int i= ; i<=n ; i++){
for (int j=i+ ; j<=n ; j++){
if (jjc(i,j)) vis[i][j]=true;
}
}
memset(dp,,sizeof(dp));
dp[]=s[]=;
for (int i= ; i<=n ; i++){
s[i]=i;
for (int j= ; j<i ; j++){
if (vis[j][i]&&dp[i]<dp[j]+)
dp[i]=dp[j]+,s[i]=j;
}
}
int maxn=,pos=;
for (int i= ; i<=n ; i++)
if (maxn<dp[i]) maxn=dp[i],pos=i;
printf("%d\n",maxn);
dfs(pos);
printf("\n");
}
return ;
}
uva 103(最长递增子序列) Stacking Boxes的更多相关文章
- HOJ 2985 Wavio Sequence(最长递增子序列以及其O(n*logn)算法)
Wavio Sequence My Tags (Edit) Source : UVA Time limit : 1 sec Memory limit : 32 M Submitted : 296, A ...
- (转载)最长递增子序列 O(NlogN)算法
原博文:传送门 最长递增子序列(Longest Increasing Subsequence) 下面我们简记为 LIS. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则 ...
- 最长公共子序列(LCS)和最长递增子序列(LIS)的求解
一.最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个 ...
- 最长递增子序列 O(NlogN)算法
转自:点击打开链接 最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS. 排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个 ...
- 51nod 1134 最长递增子序列
题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ...
- 动态规划 - 最长递增子序列(LIS)
最长递增子序列是动态规划中经典的问题,详细如下: 在一个已知的序列{a1,a2,...,an}中,取出若干数组组成新的序列{ai1,ai2,...,aim},其中下标i1,i2,...,im保持递增, ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
- 2.16 最长递增子序列 LIS
[本文链接] http://www.cnblogs.com/hellogiser/p/dp-of-LIS.html [分析] 思路一:设序列为A,对序列进行排序后得到B,那么A的最长递增子序列LIS就 ...
- 【动态规划】拦截导弹_dilworth定理_最长递增子序列
问题 K: [动态规划]拦截导弹 时间限制: 1 Sec 内存限制: 256 MB提交: 39 解决: 10[提交][状态][讨论版] 题目描述 张琪曼:“老师,修罗场是什么?” 墨老师:“修罗是 ...
随机推荐
- hdu3826-Squarefree number-(欧拉筛+唯一分解定理)
Squarefree number Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- js对数组对象的操作以及方法的使用
js对数组对象的操作以及方法的使用 如何声明创建一个数组对象: var arr = new Array(); 或者 var arr = []; 如何移除所有数组中数据? arrayJson.dataL ...
- kotlin函数api
原 Kotlin学习(4)Lambda 2017年09月26日 21:00:03 gwt0425 阅读数:551 记住Lambda的本质,还是一个对象.和JS,Python等不同的是,Kotlin ...
- Web前端js下载流文件
前端下载文件大概有以下种: 1)a标签链接下载 <a href="url">点击链接下载</a> 2)表单form提交下载 var form = $(&qu ...
- black-hole《XSS的原理分析与解剖》阅读笔记
0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...
- Java基础学习笔记(四)
21.构造方法(续):分类: 隐式构造方法:如果在一个类中,没有手动编写构造方法,则系统会提供一个默认的无参的构造方法 显式构造方法:如果在一个类中,手动编写构造方法,则系统不会提供默认的无参的构造方 ...
- 581. Shortest Unsorted Continuous Subarray
Given an integer array, you need to find one continuous subarray that if you only sort this subarr ...
- nginx配置 解决ajax请求跨域问题
文章来源:http://to-u.xyz/2016/06/30/nginx-cors/ 背景描述 最近在研究RESTful API接口设计,使用的是Nginx,要实现本地http://127.0.0. ...
- awk——getline
A.getline从整体上来说,应这么理解它的用法: 当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var 或$0(无变量):应该注意到,由 ...
- mysql5.7.20更改root密码
my.cnf 中在[mysqld]下面增加 skip-grant-tables 使用空密码登录数据库执行下面命令 update mysql.user set authentication_string ...