南阳OJ 16 矩形嵌套
矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。比如(1,5)能够嵌套在(6,2)内,但不能嵌套在(3,4)中。
你的任务是选出尽可能多的矩形排成一行。使得除最后一个外,每个矩形都能够嵌套在下一个矩形内。
- 输入
- 第一行是一个正正数N(0<N<10),表示測试数据组数,
 每组測试数据的第一行是一个正正数n。表示该组測试数据中含有矩形的个数(n<=1000)
 随后的n行,每行有两个数a,b(0<a,b<100),表示矩形的长和宽
- 输出
- 每组測试数据都输出一个数。表示最多符合条件的矩形数目。每组输出占一行
- 例子输入
- 
1 
 10
 1 2
 2 4
 5 8
 6 10
 7 9
 3 1
 5 8
 12 10
 9 7
 2 2
- 例子输出
- 
5 
- 
思路:第一次打DAG上的动规。 实际上这个是一个有向图的最长路径问题,符合题目要求的用邻接表记录下来。表示能够由该节点走向下一个节点。之后就是考虑转移方程了。DP[i]=max(DP[i],dp(j)+1)。j为i出发的一个可行点。即从i可到达j。 
- 
以下给出AC代码(把路径打印的代码页附上): 
- 
#include<cstdio> 
 #include<cstring>
 #include<algorithm>
 using namespace std;
 #define N 1005
 int link[N][N]; //邻接表
 int u[N],v[N]; //各点的长跟宽
 int d[N]; //到达i的最长路径
 int n,m; int dp(int i) //记忆化搜索
 {
 int& ans=d[i];
 if(ans>0)return d[i];
 ans=1;
 for(int j=1;j<=n;j++)
 {
 if(link[i][j])
 ans=max(ans,dp(j)+1);
 }
 return ans;
 } void print(int i)
 {
 printf("%d ",i);
 for(int j=1;j<=n;j++)
 {
 if(link[i][j]&&d[i]==d[j]+1)
 {
 print(j);
 break;
 }
 }
 printf("\n");
 } int main()
 {
 int i,j;
 int t;
 scanf("%d",&t);
 while(t--)
 {
 int ans=0;
 scanf("%d",&n);
 memset(link,0,sizeof(link));
 for(i=1;i<=n;i++)
 {
 scanf("%d %d",&u[i],&v[i]);
 if(u[i]>v[i])
 swap(u[i],v[i]);
 }
 for(i=1;i<=n;i++)
 {
 for(j=1;j<=n;j++)
 {
 if(u[i]<u[j]&&v[i]<v[j])
 {
 link[i][j]=1;
 }
 }
 }
 int k;
 memset(d,0,sizeof(int)*(n+3));
 for(i=1;i<=n;i++)d[i]=dp(i);
 for(i=1;i<=n;i++)
 {
 if(ans<d[i])
 {
 ans=d[i];
 k=i;
 }
 }
 printf("%d\n",ans);
 //print(k);
 } return 0;
 }
南阳OJ 16 矩形嵌套的更多相关文章
- NYOJ 16 矩形嵌套(经典DP)
		http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度: ... 
- nyoj 16 矩形嵌套
		矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ... 
- NYOJ 16 矩形嵌套(动态规划)
		矩形嵌套 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅 ... 
- nyoj 题目16 矩形嵌套
		矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ... 
- NYOJ 16 矩形嵌套 (DAG上的DP)
		矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 有n个矩形,每个矩形能够用a,b来描写叙述.表示长和宽.矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当 ... 
- NYOJ 16 矩形嵌套【DP】
		解题思路:呃,是看的紫书上面的做法,一个矩形和另一个矩形之间的关系就只有两种,(因为它自己是不能嵌套自己的),可嵌套,不可嵌套,是一个二元关系,如果可嵌套的话,则记为1,如果不可嵌套的话则记为0,就可 ... 
- oj.1677矩形嵌套,动态规划  ,贪心
		#include<iostream> #include<algorithm> #include<cstring> using namespace std; stru ... 
- NYOJ 16 矩形嵌套(经典动态规划)
		传送门 Description 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于 ... 
- 南阳 ACM16 矩形嵌套 动态规划
		矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ... 
随机推荐
- 算法-最长子序列和C/C++实现(三个复杂度)
			最长子序列和的问题非常easy: 就是一个数组,求出当中当中连续的某一段和,而这一段和是全部的连续段和的最大的值.求出这个值. 先说复杂度最高的:O(n3) 直接上代码,非常easy的: // // ... 
- 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
			源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1. 画直线 Ø 增加‘直线’菜单项,建立类向导: Ø 对CXX ... 
- (1)前言——(10)jquery项目的历史(History of the jQuery project)
			This book covers the functionality and syntax of jQuery 1.6.x, the latest version at the time of wri ... 
- jsp和serverlet的差别
			開始找工作面试的第一家公司,爱思创新 面试题: 1.jsp和serverlet的差别 简单来说: jsp:是包括java程序片的html文件servlet:是包括html的java文件 事实上说白了J ... 
- Android网络:开发浏览器(五)——功能完善之保存图片实现
			最近几天开学,所以没有更新博客.今天开始更新.最近我打算每天抽出一些事件看点Thinkin Java这本书,仔细研究下java,当然也会出这个博客关于Think in java系列的博客,大家可以一起 ... 
- mssql数据库游标批量改动符合条件的记录
			//需求:因为项目刚上传,没有票数,为了表现出一定的人气,须要在一開始把各项目的票数赋一个值 , 但每一个项目不能一样,否则easy看出问题,呵呵 . DECLARE @Id varchar(50) ... 
- 菜鸟从零学编程(七)——搭建一个完整的Java开发环境
			作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ... 
- paip.odbc DSN的存储与读取
			paip.odbc DSN的存储与读取 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/atti ... 
- flexbox语法(摘抄)
			flex 容器上的属性: flex-direction: row | row-reverse | column | column-reverse (项目的排列方向) flex-wrap : nowra ... 
- python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET
			python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET python random模块 分类: python 2011-11-15 15:31 6037人阅读 评论(2) ... 
