有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础。很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。

题目描述:

有n个矩形,每个矩形可以用两个整数a,b描述,表示它的长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d,或者b<c,a<d(相当于把矩形X旋转90°)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)内。你的任务是选出尽可能多的矩形排成一行。使得除了最后一个之外,每个矩形都可以嵌套在下一个矩形内。

分析:

矩形之间的"可嵌套"关系是一个典型的二元关系,二元关系可以用图来建模。如果矩形X可以嵌套在矩形Y里,我们就从X到Y连一条有向边。这个有向图是无环的,因为一个矩形无法直接或间接地嵌套在自己的内部。换句话说,它是一个DAG。这样,我们的任务便是求DAG上的最长路径。

方法一:

#include "stdio.h"
#include "string.h"
#define maxn 1000+10 typedef struct {      //矩形的数据结构,长、宽 int length;    int width;
}rectangle;int G[maxn][maxn];       //DAG图的矩阵表示
int d[maxn],n;          //d[i]顶点i的最长路径
rectangle rec[maxn];//打印出图的邻接矩阵,目的是确保建图正确无误
void print_Graph()
{printf("|矩 形|");for(int i=0;i<n;i++) printf("%2d,%2d|",rec[i].length,rec[i].width);printf("\n");for(int i=0;i<n;i++){for(int k=0;k<=n;k++)printf("------");printf("\n");printf("|%2d,%2d|",rec[i].length,rec[i].width);for(int j=0;j<n;j++){printf("  %d  |",G[i][j]);}printf("\n");}
}//构造图
void createGraph()
{memset(G,0,sizeof(G));for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(rec[i].length>rec[j].length && rec[i].width>rec[j].width){                G[i][j]=1;     //rec[i] 包含 rec[j]}}}// print_Graph();
}//记忆化搜索程序
int dp(int i)
{int& ans=d[i];    //为该表项声明一个引用,简化对它的读写操作。 if(ans>0) return ans;ans=1;for(int j=0;j<n;j++){if(G[i][j]){int tmp=dp(j);ans=ans>tmp+1?ans:tmp+1; }}return ans;
}int main()
{int N;scanf("%d",&N);while(N-->0){int ans=0;scanf("%d",&n); for(int i=0;i<n;i++){int tmp1,tmp2;scanf("%d%d",&tmp1,&tmp2);rec[i].length=tmp1>tmp2?tmp1:tmp2;rec[i].width=tmp1<tmp2?tmp1:tmp2; }createGraph();//初始化记忆数组 memset(d,0,sizeof(d)); for(int i=0;i<n;i++){int tmp=dp(i);ans=ans>tmp?ans:tmp;    }printf("%d\n",ans);} return 0;
} 

题目来源NYOJ: http://acm.nyist.net/JudgeOnline/problem.php?pid=16

方法二:可以点我!

嵌套矩形——DAG上的动态规划相关推荐

  1. nyoj 16 矩形嵌套 (DAG上的DP)

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

  2. UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)

    题目链接 题意:  某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右的编号为1~N.有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开.在时刻0,Mario从第1站出发,目的是 ...

  3. P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)

    P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...

  4. 20170814(三道题-DAG上DP 二分查找 map)

    题目 NYOJ_16 矩形嵌套 题意 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a 解决 DAG上的动态规划 1. 二元关系能够用图来建立 ...

  5. (dag模型+最长路+字典序)嵌套矩形

    题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽.矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a ...

  6. nyoj 10 skiing(DAG上的最长路,备忘录方法)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  7. 刘书dp学习笔记(1) 数字三角形与DAG上dp(上)

    我之前没怎么看过刘书,然后前几天看了一下dp,感觉dp观被刷新了- 终于明白为什么说刘书是神书了! 用[]括住的是在下的一些浅见与笔记. 顺便一提,在下不保证代码是能过评测的,因为只试了其中几个数据. ...

  8. Python使用matplotlib可视化Treemap图、treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap)

    Python使用matplotlib可视化Treemap图.treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap) 目录

  9. python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比

    python中使用squarify包可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比 目录

最新文章

  1. The Innovation | 中科院青促会主办精品英文期刊视频简介,定位IF 20+国际顶刊
  2. LIVE 预告 | 旷视王剑锋:丢弃Transformer,FCN也可以实现端到端检测
  3. 《JS设计模式笔记》 5,适配器模式
  4. tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
  5. Angular 界面元素的条件渲染
  6. 实现Parcelable接口
  7. getbook netty实战_Netty 入门教程
  8. 【优秀选手采访】看十强选手如何顺利拿下腾讯offer
  9. clion 使用技巧
  10. rm -f .... 恢复
  11. 币久网好像暂停ZEC交易了,各位的ZEC币暂时不要转入币久网了
  12. ab st语言编程手册,PLC编程语言,ST语言秒杀梯形图编程之浮点数计算
  13. 解决Deepin开机锁屏状态下能够使用触控板而解锁之后无法使用触控板的BUG
  14. html分辨手机电脑,html自动识别手机或者pc端
  15. MD5加密工具类(带盐值)
  16. 对于因果模型的常见评估函数:SHD 和 FDR
  17. 区块链行业前景还好吗?区块链技术有没有经过时间的检验?
  18. ElasticSearch 在 Spring 项目中的实践
  19. Linux 2.6 劫持系统调用 隐藏进程
  20. 自媒体从零到大v,这个方法你得知道

热门文章

  1. 荣耀v40可以升级华为鸿蒙,网传荣耀V40机型也能升级鸿蒙OS 首批更新机型有望是这5款...
  2. tomcat加白名单_超详细的tomcat管理页面各类型配置总结
  3. aspx是什么语言_什么是网页
  4. Aspcms框架的webshell
  5. python爬携程酒店评论_python爬虫爬取携程网的酒店评论数据时,有个请求参数不知道是怎么生成的?...
  6. (1)《Head First HTML与CSS》学习笔记---HTML基本概念
  7. 9.1定时器 小时分秒
  8. Sequence.js 实现带有视差滚动特效的图片滑块
  9. Python操作Redis(转)
  10. 关于DJANGO MODELS的个人理解和RELATED_NAME的使用