收藏 分享(赏)

动态规划题目分析.ppt

上传人:myk79025 文档编号:4996536 上传时间:2019-01-28 格式:PPT 页数:21 大小:448.50KB
下载 相关 举报
动态规划题目分析.ppt_第1页
第1页 / 共21页
动态规划题目分析.ppt_第2页
第2页 / 共21页
动态规划题目分析.ppt_第3页
第3页 / 共21页
动态规划题目分析.ppt_第4页
第4页 / 共21页
动态规划题目分析.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、动态规划题目分析,题目目录,走迷宫问题(maze) 叠放箱子(boxes) 走道铺砖(floor) 三色二叉树(tro) 艺术馆火灾(fire) 打砖块(birke) 火车调度(rail) 重建道路(roads),走迷宫问题(maze),给你N*N的格子,每个格子里面有一个数。 从左上角出发,每次可以向上下左右四个方向最多移动K格。 并且规定每次到达的格子的数字必须大于上一次所在方格的数字。 要求你走过的方格的所有数之和最大,并输出这个最大和。,题目分析,我们可以把这个矩阵变为一个图,每个格子看成一个点,如果某个格子能够到另外一个格子,则连一条有向边。 我们可以看到这是一个有向图,那么对于某个

2、点有影响的点是数字比它小的点。,题目分析,那么我们可以得到方程: Fi,j=max(fx,y)+ai,j(点(x,y)能够到达点(i,j) 那么方程怎么实现转移呢? 我们可以分析,如果当某个点被扩展时,那么这个点要达到最优状态,及这个点不能被其它没扩展的点到达。 怎样处理呢?我们知道当某个点的数比这个数小时,就有可能到达这个点,我们就可以先把这些点从小到大排序,然后一次处理即可。 处理时是像广搜一样由已知状态扩展到未知状态, 时间复杂度:O(NNK);,叠放箱子(boxes),有一批箱子,编号为1到N。 每一个箱子都有自身重量和可承受重量。 现在要把这些箱子叠放在一起,并且要满足这些条件: 一

3、、每个箱子上最多只能直接叠放一个箱子; 二、编号较小的箱子不能放在编号较大的箱子之上; 三、每个箱子之上的所有箱子重量之和不得超过该箱的可承受重量。 问最多可以叠放多少箱子。,题目分析,对于这题目输出方案,我们可以用记录某个状态是由那个状态得到的,这样我们可以得到方案数。 那么怎样求最大的叠放数呢?我们不妨倒过来分析:Fi,j表示后面编号为I到N的物品到达重量为J时最多可以放多少个物品,方程为: FI,j=max(fi+1,j-mi+1(满足j-mi=wi),fi+1,j),我们再用LaI,j记录这个状态是由fi+1,laI,j得到的。 时间复杂度为:O(3000N),走道铺砖(floor),

4、给你N*M的图(N*M为偶数),然后用1*2的方块把这个图全部铺满。 问有多少个不同本质的方案。 Min(n,m)=12;n,m=40;,题目分析,可以知道:N,M中有一个特别小。 我们就可以用状态压缩的动态规划来求解。 首先对某一列分析,这一列可能有些格子已经被占领,那么其它的格子要么被方块横放,要么被方块竖放,那么下一列的初始状态可以搜索出来。,题目分析,FI,j表示,处理到第I列时,在第I-1列放置方块之后的第I列状态用二进制表示为J时不同方案数。 我们就可以通过搜索求出FI+1,X来。 最后处理到Fn,X(nm)时,那么对于状态X搜索时只能竖放砖头。 答案就是Fn,2m-1。 时间复杂

5、度:O(m22n)。 注意要用高精度。,三色二叉树(tro),给你一颗二叉树,某个节点有可能只有一个儿子节点。 然后给这些节点染成3种颜色,0,1,2 要求:一个节点与其子节点的颜色必须不同 ;如果该节点有两个子节点,那么这两个子节点的颜色也必须不相同 。 问最多和最少有多少个点能被染成0。,题目分析,我们知道这个问题是要在树上进行动态规划,那怎样划分状态呢? 能够影响一个节点的状态只有它的儿子节点,设Froot,j表示以根节点为root的子树时,且节点root染成j这颜色所需求最少的0颜色是多少。 方程为FI,j=max(fi.l,p1+fi.r,p2+da)且(p1p2j;当j=0时da=

6、1否则da=0,). 同理我们也可以求出最少需要多少0; 时间复杂度:O(N);,艺术馆火灾(fire),由LSY讲解,打砖块(brike),在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,最下面一层仅有一块砖。第i层的砖块从左至右编号为1,2,i,第i层的第j块砖有一个价值ai,j(ai,j1,则你必须先敲掉第i-1层的第j和第j+1块砖。 你的任务是从一个有n(n=50)层的砖块堆中,敲掉(m=500)块砖,使得被敲掉的这些砖块的价值总和最大。,题目分析,我们先把这些砖块都向左移动,使他成直角三角形。 如果把位置(i,j)的砖块打掉,那么就必须把位置(i-1,j)和(i

7、-1,j+1)的砖块打掉。 那么对于位置(x,y),yj的是不会影响位置(i,j)的。,题目分析,我们把状态重新定义:如上图,FI,J,K表示新位置(I,J)时打掉了K快砖之后所得到的最大价值总和。 FI,j,k=max(fi-1,p,k-j+daI,j) 用滚动数组来求解即可。 时间复杂度为:O(N3K),通过优化可以降为O(N2K),铁路调度(rail),给你N(N=250)列火车的进站和出站时间。 然后给你M(M=3)个轨道。 问你最多能够进站多少量火车。,题目分析,由于M不同,所用的方法也不同。 但我们可以把列车先按出站时间排序。 M=1:fi表示前I辆列车进站且第I辆列车刚刚进站最多

8、有多少量列车。 M=2:FI,k1,k2,表示处理前I辆列车且,进站的列车为K1,K2时最多能进多少辆。,题目分析,M=3:可以用状态(a,b,c)来表示,且出站时间a=b=c。 如果对于状态(b,c,d),且d的入站时间大于a的出站时间的话,就状态(a,b,c)向状态(b,c,d)连一条有向边,权值为1。 建立一个起点,对入度为0的状态加入一条边权为3的有向边。 在建立一个终点,使出度为0的状态连向它,且权值为0。 那么最优值是从起点到终点的最长路(这个图无环)。,重建道路(roads),给你N个节点的树。 问你最少毁坏多少条边使得有一个节点为P的子树。,题目分析,由于我开始看错了题,所以想了另一个方法。 我们可以看出这是树形DP。 首先可以把这颗森林变为二叉树(及左儿子,右兄弟),且节点1为这可树的根设Di表示在原树中这个子树的节点个数。 FI,j表示在新树中以节点I为根的子树中如果使J个节点脱离,最少需要摧毁多少条边。 FI,j=min(fI.l,k+fi.r,j-k,fi.r,j,fi.r,j-di+1); 那么答案为:min(f1,n-p,fi.l,di-p+1)。 时间复杂度O(NP2),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 工作计划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报