第九章(二)DAG上的动态规划
DAG上的动态规划:
有向无环图上的动态规划是学习DP的基础,很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。
1.没有明确固定起点重点的DAG模型:
嵌套矩形问题:有n个矩形,每个矩形可以用两个整数a、b表示它的长和宽,矩形可以嵌套在矩形中当且仅当a<c,b<d或者b<c,a<d。选出尽量多的矩形排成一行,使得除了最后一个之外,每个矩形都可以嵌套在下一个矩形内。如果有多解矩形编号字典序应尽量小。
1 /**2 * 嵌套矩形问题:有n个矩形,每个矩形可以用两个整数a、b表示它的长和宽,3 * 矩形可以嵌套在矩形中当且仅当a<c,b<d或者b<c,a<d。选出尽量多的矩形排成一行,使得除了最后一个之外,每个矩形都可以嵌套在下一个矩形内。如果有多解矩形编号字典序应尽量小。4 */5 static int[] d= {-1,-1,-1,-1,-1,-1};6 static int[][]a=new int[6][6];7 8 public static void getA(ErYuan[] es) {//建立单向无环图9 for(int i=0;i<es.length;i++) {
10 for(int j=0;j<es.length;j++) {
11 if(es[i].isOk(es[j])) {
12 a[i][j]=1;
13 }
14 }
15 }
16 }
17
18 public static int dp(int i) {//从i开始的最大嵌套矩形个数
19 if(d[i]>=0) {
20 return d[i];
21 }
22 d[i]=0;
23 for(int j=0;j<d.length;j++) {
24 if(a[i][j]==1) {
25 d[i]=Math.max(d[i],1+dp(j));
26 }
27 }
28 return d[i];
29 }
30
31 public static void test(int i,String head) {//找到d[i]中的最大值,按字典序输出路径们
32 head=head+i;
33 if(d[i]==0)
34 {
35 System.out.println(head);
36 }
37 String str="";
38 for(int j=0;j<d.length;j++) {
39 if(a[i][j]==1&&d[i]==d[j]+1) {
40 test(j,head);
41 }
42 }
43 }
44 public static void main(String[] args) {
45 Scanner scn=new Scanner(System.in);
46 ErYuan[] es=new ErYuan[6];
47 for(int i=0;i<6;i++) {
48 int x=scn.nextInt();
49 int y=scn.nextInt();
50 es[i]=new ErYuan(x,y);
51 }
52 getA(es);
53 for(int i=0;i<d.length;i++) {
54 dp(i);
55 }
56 int max=0;
57 for(int i=1;i<d.length;i++) {
58 max=d[max]>=d[i]?max:i;
59 }
60 for(int i=max;i<d.length;i++) {
61 if(d[i]==d[max]) {
62 test(i,"");
63 }
64 }
65 }
1 class ErYuan{2 int x;3 int y;4 public boolean isOk(ErYuan e) {5 if((x<e.x&&y<e.y)||(e.x>y&&e.y>x)){6 return true;7 }8 return false;9
10 }
11 public ErYuan(int x, int y) {
12 super();
13 this.x = x;
14 this.y = y;
15 }
16
17 }
2.固定终点的最长路和最短路
硬币问题:有n种硬币,面值分别为v1..vn,每种都有无限多,给定非负整数S。可以选用多少个硬币,使得面值之和恰好为S?输出硬币的最小值和最大值1<=n<100,0<=S<=10000,1<=vi<=S
1 static int[]d=new int[10];2 static int[]vis=new int[10];3 static int[]v=new int[5];4 /**5 * 硬币问题:有n种硬币,面值分别为v1..vn,每种都有无限多,给定非负整数S。6 * 可以选用多少个硬币,使得面值之和恰好为S?7 */8 /**9 * S->0的路径长度
10 * @param S
11 */
12 public static int dp(int S) {
13 if(vis[S]==1)return d[S];
14 vis[S]=1;
15 for(int i=0;i<vis.length;i++)if(vis[i]<=S)d[S]=Math.max(d[S], dp(S-vis[i])+1);
16 return d[S];
17 }
如果要打印出来就同上,可以用递推或者储存的方式打印出来,储存的话用空间换取时间。
3.小结
传统的递推法可以表示成“对于每个状态i,计算f(i)",或者称为“填表法”.这需要对于每个状态i,找到f(i)依赖的所有状态。
刷表法:对于每个状态i,更新f(i)所影响的状态。只有当每个状态所依赖的对它的影响相互独立时才能用刷表法。
第九章(二)DAG上的动态规划相关推荐
- UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)
题目链接 题意: 某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右的编号为1~N.有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开.在时刻0,Mario从第1站出发,目的是 ...
- 嵌套矩形——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 题目描述: 有n个矩形,每个矩形可以用 ...
- P3244 [HNOI2015]落忆枫音(DAG上的动态规划问题,朱刘定理,乘法逆元)
P3244 [HNOI2015]落忆枫音 样例太坑了!竟然和题目描述给的图不一样! 题目描述 给定一张有向无环图,这张图满足一个性质:以点1为根节点,保证至少有一棵有向树,连接所有的节点. 现在向这张 ...
- nyoj 16 矩形嵌套 (DAG上的DP)
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...
- 20170814(三道题-DAG上DP 二分查找 map)
题目 NYOJ_16 矩形嵌套 题意 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a 解决 DAG上的动态规划 1. 二元关系能够用图来建立 ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- SRPG游戏开发(四十)第九章 战斗系统 - 二 计算战斗数据(Calculate Combat Data)
返回总目录 第九章 战斗系统(Combat System) 在SRPG中,大多数情况是指角色与角色之间的战斗.而这种战斗一般有两种模式: 地图中直接战斗: 有专门的战斗场景. 这两种模式的战斗在数据上 ...
- 第九章 SQL查询数据库(二)
文章目录 第九章 SQL查询数据库(二) 调用用户定义函数的查询 查询串行对象属性 查询集合 使用说明和限制 调用文本搜索的查询 伪字段 查询元数据 快速查询 查询和企业缓存协议Enterprise ...
- 达芬奇密码 第九十二章
达芬奇密码 第九十二章[@more@] 第九十二章 国王学院是国王乔治四世于1829年创建的,里面设有神学及宗教研究所,它离议会很近,是由皇家出资运营的.国王学院的宗教部在宗教教学以及研究方面号称具有 ...
- 现实迷途 第九章 N夜情(上)
第九章 N夜情(上) 注:原创作品,请尊重原作者,未经同意,请勿转载,否则追究责任. 江北对于夏欣,还没有上升到要追她的高度,他只是想玩玩而已.也许是因为受到女友绝情地离他而去的刺激,也许是因为受到狗 ...
最新文章
- 堡垒机高危命令正则表达式
- 阿里达摩院包揽AI领域六大权威榜单冠军:用人类的学习方式超越人类
- java基础知识之初识java
- 《系统集成项目管理工程师》必背100个知识点-21监控项目工作ITTO
- 计算机函数图象,信息技术应用用计算机绘制函数图象
- j2me手机游戏结构分析和实际小例子系列一 游戏背景和游戏精灵
- No module named 'urllib2'
- w3wp oracle,w3wp.exe占用CPU超过50%的处理
- Python入门教学之(标识符和保留字)
- 如何销毁一个实例化对象_JAVA中如何创建和销毁对象
- 来及Java空间的传送门2
- 在深圳呆那么就感觉伤心了有木有?
- 计算机科研立项应用类题目,省级课题计算机课题题目推荐
- stata-如何快速合并多个文件夹下的数据文件
- Unity开发OpenXR | (一)OpenXR是什么?一文带你全面了解OpenXR的相关知识,上车收藏不迷路
- [RK3399][Android7.1] Display中的VOP模块介绍
- UM5202EEDFSOT-143工作电压5V用于高速线路保护的2线ESD保护二极管阵列管UM5202EEDF USB端口和以太网端口保护TVS二极管阵列,低泄漏电流和箝位电压25V结电容1PF
- ytu 2463:给小鼠补充代码(DFS 深度优先搜索)
- 计算机专业的烧脑问题,这几类专业很“烧脑”,数学不好的同学慎报,不然就是噩梦的开始...
- 直播平台源码实现状态栏滑动隐藏和tabbar的教程
热门文章
- iOS自动布局高级用法 纯代码约束写法
- NOD32 V5 企业版部署方案
- 一个有趣的例子,JS+CSS实现【兴趣是最好的老师】
- ap_invoice_distributions_all与PO表关联问题
- P ⊆ co-NP的原因
- [转载]仿射变换(Affine Transformation)
- hdoj 1071 The Area 求面积
- python用pandas读取数据时出现错误_Python Pandas错误标记数据
- 拓端tecdat|R语言中的模拟过程和离散化:泊松过程和维纳过程
- figsize, dpi参数