南阳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) ...