矩形嵌套

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 4
 
描述
有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形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

第一种方法:

#include<cstdio>
#include<string.h>
#include<vector>
#include<algorithm>
#define N 1005
using namespace std;
vector<int> vec[N];
int dp[N];
struct rec
{
int l,w;
}a[N];
int nest(rec a1,rec a2) /*判断两个矩形是否可以嵌套*/
{
if((a1.l>a2.l&&a1.w>a2.w)||(a1.l>a2.w&&a1.w>a2.l))
return 1;
return 0;
}
int dfs(int x,int n)
{
if(dp[x]!=-1)
return dp[x];
int maxv=0,flag=0;
for(int i=0;i<vec[x].size();i++)
{
flag=1;
maxv=maxv>(dfs(vec[x][i],n)+1)?maxv:dfs(vec[x][i],n)+1;
}
if(!flag)
return dp[x]=1;
return dp[x]=maxv;
}
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&a[i].l,&a[i].w);
memset(vec,0,sizeof(vec));
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j)
continue;
if(nest(a[i],a[j])) /*如果i可以嵌套j*/
vec[i].push_back(j);
}
memset(dp,-1,sizeof(dp));
int maxv=0;
for(i=0;i<n;i++)
{
if(dp[i]==-1)
dfs(i,n);
maxv=maxv>dp[i]?maxv:dp[i];
}
printf("%d\n",maxv);
}
return 0;
}

第二种方法:

#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 1005
struct rec
{
int l;
int w;
}a[N];
int dp[N];
bool comp(rec a1,rec a2) /*按长从小到大排序*/
{
if(a1.l==a2.l)
return a1.w<a2.w;
return a1.l<a2.l;
}
int main()
{
int t,i,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].l,&a[i].w);
if(a[i].l<a[i].w) /*保证长比宽大*/
{int temp=a[i].l;a[i].l=a[i].w;a[i].w=temp;}
}
sort(a,a+n,comp);
int maxv=0;
for(i=0;i<n;i++) /*求以i为终点最多嵌套几个*/
{
dp[i]=1;
for(int j=0;j<i;j++)
{
if((a[j].l<a[i].l)&&(a[j].w<a[i].w)) /*若可以嵌套*/
if(dp[i]<dp[j]+1)
dp[i]=dp[j]+1;
}
if(maxv<dp[i])
maxv=dp[i];
}
printf("%d\n",maxv);
}
return 0;
}

NYOJ 16 矩形嵌套(动态规划)的更多相关文章

  1. NYOJ 16 矩形嵌套(经典DP)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms  |           内存限制:65535 KB 难度: ...

  2. nyoj 16 矩形嵌套

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...

  3. NYOJ 16 矩形嵌套 (DAG上的DP)

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有n个矩形,每个矩形能够用a,b来描写叙述.表示长和宽.矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当 ...

  4. NYOJ 16 矩形嵌套【DP】

    解题思路:呃,是看的紫书上面的做法,一个矩形和另一个矩形之间的关系就只有两种,(因为它自己是不能嵌套自己的),可嵌套,不可嵌套,是一个二元关系,如果可嵌套的话,则记为1,如果不可嵌套的话则记为0,就可 ...

  5. NYOJ 16 矩形嵌套(经典动态规划)

    传送门 Description 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于 ...

  6. nyoj 题目16 矩形嵌套

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...

  7. 南阳 ACM16 矩形嵌套 动态规划

    矩形嵌套 时间限制:3000 ms  |           内存限制:65535 KB 难度:4   描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ...

  8. 南阳OJ 16 矩形嵌套

    描写叙述 有n个矩形,每个矩形能够用a,b来描写叙述,表示长和宽. 矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度). ...

  9. CJOJ 1070 【Uva】嵌套矩形(动态规划 图论)

    CJOJ 1070 [Uva]嵌套矩形(动态规划 图论) Description 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽.矩形 X(a, b) 可以嵌套在矩形 Y(c, ...

随机推荐

  1. Html.Action、html.ActionLink与Url.Action的区别

    1.html.ActionLink返回的指向指定controller.指定action的超链接标签<a>标签.如果没有指定controller,则默认为本页面对应的Controller. ...

  2. ASP.NET数据绑定控件简介

    •数据绑定分为数据源和数据绑定控件两部分(①数据绑定控件通过数据源获取和修改数据②数据绑定控件通过数据源隔离数据提供者和数据使用者)数据绑定控件→数据源→数据库•数据源:SqlDataSource(连 ...

  3. new Option()——实现时间联动

    //1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); m ...

  4. [!] Unable to satisfy the following requirements:

    出现这个问题是由于我本地Podfile文件上第三方版本太低. 解决方案就是,更新一下本地Podfile文件上的第三方版本,也就是pod update --verbose一下. 注意一下,这个命令需要很 ...

  5. Knockoutjs官网翻译系列(四) computed中依赖追踪是如何工作的

    初学者无需了解这些 ,但是很多高级程序员想知道我们为什么可以保持跟踪这些依赖以及可以正确的更新到UI中.它其实很简单.跟踪算法是这样的: 无论何时你定义了一个computed observable,K ...

  6. C++拾遗(十三)友元和嵌套类

    友元类 使用友元的场合: 1.两个类既不是is-a关系也不是has-a关系,但是两个类之间又需要有联系,且一个类能访问另一个类的私有成员和保护成员. 2.一个类需要用到另外多个类的私有成员. C++p ...

  7. app.config动态修改及读取

    1.添加应用程序配置文件 右键点击项目,选择“添加”→“添加新建项”→“添加应用程序配置文件”将其添加到项目中. 2.设置配置文件 <?xmlversion="1.0"enc ...

  8. phplib template说明

    phplib template phplib有五大功能:将数据库驱动和对数据库操作完全分离:支持session:权限许可:模板:购物 车 说明:1.第一个简单的模板页first.html模板中的{ma ...

  9. wordpress后台打开缓慢的临时解决方法

    解决方法是添加下面的主题在目前的代码在functions.php: //禁用Open Sans class Disable_Google_Fonts { public function __const ...

  10. JS中typeof与instanceof的区别 (2010-05-26 10:47:40

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...