02_嵌套矩形(DAG最长路问题)
来源:刘汝佳《算法竞赛入门经典--训练指南》 P60 问题2:
问题描述:有n个矩形,每个矩形可以用两个整数a,b描述,表示它们的长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中的条件为:当且仅当a<c,b<d 或者b<c,a<d(相当于把矩形X旋转90 度)。选出尽量多的矩形排成一行,使得除了最后一个之外,每一个矩形都可以嵌套在下一个矩形内。
分析:对于本题中的n个矩形,以每个矩形作为一个点,若X矩形能嵌套在Y矩形中,则从X向Y连一条边,题目则变为了在DAG(无回路有向图)中求最长路径的问题。对每一个矩形i,设d(i)为矩形i结尾的最长链的长度,则d(i)=Max{0,d(j)|(矩形j可以嵌套在矩形i中)}+1;
例题来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=16
代码实现:
#include "stdio.h"
#include "string.h"
#define N 1005 int n;
int dp[N];
int map[N][N]; struct point
{
int x,y;
}a[N]; int inline Max(int a,int b){ return a>b?a:b; } int Pudge(int a,int b,int c,int d)
{
if( (a<c&&b<d) || (b<c&&a<d) )
return ;
return ;
} int DFS(int k)
{
if(dp[k]!=-)
return dp[k];
int i;
dp[k] = ;
for(i=; i<n; i++)
{
if(map[i][k]==)
dp[k] = Max(dp[k],DFS(i)+);
}
return dp[k];
} int main()
{
int T;
int i,j;
int ans;
scanf("%d",&T);
while(T--)
{
ans = ;
scanf("%d",&n);
for(i=; i<n; i++)
scanf("%d %d",&a[i].x,&a[i].y);
memset(map,,sizeof(map));
for(i=; i<n; i++)
{
for(j=; j<n; j++)
{
if(i==j) continue;
if(Pudge(a[i].x,a[i].y,a[j].x,a[j].y))
map[i][j] = ;
}
}
memset(dp,-,sizeof(dp));
for(i=; i<n; i++)
ans = Max(ans,DFS(i));
printf("%d\n",ans);
}
return ;
}
02_嵌套矩形(DAG最长路问题)的更多相关文章
- NYOJ16 矩形嵌套(DAG最长路)
矩形嵌套 紫书P262 这是有向无环图DAG(Directed Acyclic Graph)上的动态规划,是DAG最长路问题 [题目链接]NYOJ16-矩形嵌套 [题目类型]DAG上的dp & ...
- 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)
「BZOJ1924」[SDOI2010] 所驼门王的宝藏 tarjan + dp(DAG 最长路) -------------------------------------------------- ...
- uva 10051 Tower of Cubes(DAG最长路)
题目连接:10051 - Tower of Cubes 题目大意:有n个正方体,从序号1~n, 对应的每个立方体的6个面分别有它的颜色(用数字给出),现在想要将立方体堆成塔,并且上面的立方体的序号要小 ...
- 简单Dp----最长公共子序列,DAG最长路,简单区间DP等
/* uva 111 * 题意: * 顺序有变化的最长公共子序列: * 模板: */ #include<iostream> #include<cstdio> #include& ...
- BZOJ 5450 轰炸 (强连通缩点+DAG最长路)
<题目链接> 题目大意: 有n座城市,城市之间建立了m条有向的地下通道.你需要发起若干轮轰炸,每轮可以轰炸任意多个城市.但每次轰炸的城市中,不能存在两个不同的城市i,j满足可以通过地道从城 ...
- 嵌套矩形——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.非常多问题都能够转化为DAG上的最长路.最短路或路径计数问题. 题目描写叙述: 有n个矩形,每一个矩 ...
- uva 10131 Is Bigger Smarter?(DAG最长路)
题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- BZOJ1093 [ZJOI2007]最大半连通子图 【tarjan缩点 + DAG最长路计数】
题目 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G ...
随机推荐
- Linq查询操作之投影操作
投影操作,乍一看不知道在说啥.那么什么是投影操作呢?其实就是Select操作,名字起的怪怪的.和Linq查询表达式中的select操作是一样的.它能够选择数据源中的元素,并指定元素的表现形式.投影操作 ...
- 【基础】Html跨域跳转问题整理
今天遇到一个问题,是有关 跨域跳转问题,涉及到知识比较基础. 具体问题是: A站点的 PageA (Post数据)到 B站点的 PageB,PageB接受到后Redirect到B站的 PageC: ...
- C语言中有bool类型吗?
之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...
- 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互
[源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...
- ComponentOne Studio for Enterprise 2015 v1 全新发布
ComponentOne Studio 即将发布2015年的第一个版本.2015 v1版本聚焦于优化性能.提升数据可视化能力.加强数据管理以及更人性的输入方式及报表解决方案. 免费下载试用 WinFo ...
- 伏羲八卦、文王六十四卦、老子阴阳太极、西方哲学辩证与"解耦和复用”思想的异曲同工之妙
伏羲八卦.文王六十四卦.老子阴阳太极.西方哲学辩证与"解耦和复用”思想的异曲同工之妙 问题:任何程序语言在遇到复杂逻辑时,代码维护难度就会加大,如何处理该问题? 答案:重构,模块化. ...
- C#常用集合的使用(转载)
大多数集合都在System.Collections,System.Collections.Generic两个命名空间.其中System.Collections.Generic专门用于泛型集合. 针对特 ...
- jquery常用选择器
1.数字性过滤 $("tr:first") //选择所有tr元素的第一个 $("tr:last") / ...
- MongoDB整合Spring
1.环境 Jdk:1.6.0_10-rc2 Spring3.1.2 下载 依赖jar文件: 2.相关配置 ①.Spring配置文件 <?xml version="1.0" ...
- dict和set
#dict和set #dict #Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map #使用键-值(key-value)存储,具有极快的查找速度. #字 ...