树状DP与状态压缩DP.课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《树状DP与状态压缩DP.课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 树状 DP 状态 压缩 课件
- 资源描述:
-
1、陈益波陈益波香港城市大学香港城市大学20112011年年7 7月月3030日日华中科大华中科大2011 ACM2011 ACM暑期集训暑期集训动态规划(三)动态规划(三)状态压缩状态压缩DP DP 及及 树型树型DPDP个人简介祖籍:浙江香港城市大学 商学院 09级PhD管理科学专业 Operation Research.QQ: 112997821人人网: 陈益波Email: 主要内容状态压缩思想状态压缩DP例题讲解树型DP特征树型DP例题讲解总结内容来源树型动态规划和状态压缩动态规划 -wangfangbob动态规划的状态方程树形动态规划,状态压缩,结果与参数的互换 -李子星树型动态规划的实
2、例分析 -李彦亭什么是树型动态规划顾名思义,树型动态规划就是在“树”的数据结构上的动态规划,平时作的动态规划都是线性的或者是建立在图上的,线性的动态规划有二种方向既向前和向后,相应的线性的动态规划有二种方法既顺推与逆推,而树型动态规划是建立在树上的,所以也相应的有二个方向:根叶:不过这种动态规划在实际的问题中运用的不多,也没有比较明显的例题,所以不在今天讨论的范围之内。叶根:既根的子节点传递有用的信息给根,完后根得出最优解的过程。这类的习题比较的多,下面就介绍一些这类题目和它们的一般解法。例题一:HDUHDU 2412 2412 PARTY AT HALI-BULA题目大意:n个人形成一个关系
3、树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。这是一个经典的树型动态规划。状态?转移?1.2 PARTY AT HALI-BULA 简单的染色统计是不正确的1.3 PARTY AT HALI-BULA人之间的关系形成树型结构DP, 用dpi0表示不选择i点时,i点及其子树能选出的最多人数,dpi1表示选择i点时,i点及其子树的最多人数。1.4 PARTY AT HALI-BULA状态转移方程:对于叶子节点 dpk0 = 0, dpk1 =
4、 1对于非叶子节点i,dpi0 = max(dpj0, dpj1) (j是i的儿子)dpi1 = 1 + dpj0 (j是i的儿子) 最多人数即为max(dp00, dp01)如何判断最优解是否唯一?1.5 PARTY AT HALI-BULA新加一个状态dupij,表示相应的dpij是否是唯一方案。对于叶子结点, dupk0 = dupk1 = 1.对于非叶子结点,对于i的任一儿子j,若(dpj0 dpj1 且 dupj0 = 0) 或 (dpj0 dpj1 且 dupj1 = 0) 或 (dpj0 = dpj1),则dupi0 = 0对于i的任一儿子j有dupj0 = 0, 则dupi1
5、= 0例题二:STRATEGIC GAME 题目大意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。典型的树型动态规划状态?转移?2.2 STRATEGIC GAMEdproot i 表示以i为根的子树,在i上放置一个士兵,看守住整个子树需要多少士兵。all i 表示看守住整个以i为根的子树需要多少士兵。2.3 STRATEGIC GAME状态转移方程: 叶子节点:dprootk =1; allk = 0; 非叶子节点: dprooti = 1 + allj(j是i的儿子); alli = min(
6、 dprooti, dprootj(j是i的儿子) );这个题目还是比较简单的,如果把题目中看守边变成看守相邻的点呢?留给你来思考_例题三例题三 加分二叉树加分二叉树 设一个n个节点的二叉树tree的中序遍历为(l,2,3,n),其中数字1,2,3,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分 subtree的右子树的加分subtree的根的分数 若某个子树为空,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。 试
7、求一棵符合中序遍历为(1,2,3,n)且加分最高的二叉树tree。3.2 基础回顾树的中序遍历若二叉树为空则结束返回,否则:(1)中序遍历左子树。(2)访问根结点。(3)中序遍历右子树。树的前序遍历若二叉树为空则结束返回,否则:(1)访问根结点. .(2)前序遍历左子树. .(3)前序遍历右子树. .3.3 样例【输入格式】 第1行:一个整数n(n30),为节点个数。 第2行:n个用空格隔开的整数,为每个节点的分数(分数100)。【输出格式】 第1行:一个整数,为最高加分(结果不会超过4,000,000,000)。 第2行:n个用空格隔开的整数,为该树的前序遍历。【输入样例】 5 5 7 1
8、2 10【输出样例】 145 3 1 2 4 53.4 分析本题适合用动态规划来解。如果用数组valuei,j表示从节点i到节点j所组成的二叉树的最大加分,则动态方程可以表示如下:valuei,j=maxvaluei,i+valuei+1,j, valuek,k+valuei,k*valuek+1,j | ikj, valuei,j-1 + valuej,j ;第一项 为 左子树为空, 根为i,右子树i+1,j。第二项 为 左子树为i,根为i+1,右子树为i+2,j.树型动态规划总结必要条件:子树之间不可以相互干扰,如果本来是相互干扰的,那么我们必须添加变量使得他们不相互干扰。树形动态规划通常
9、从叶节点(边界)开始逐步向上一层的节点(即父节点)进行状态方程的转移,直到根节点。内容二 状态压缩动态规划状态压缩动态规划: 用尽量少的状态表示出DP的整个过程。压缩所有不必要的信息。典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。例题四:经典问题TSP一个n个点的带权的有向图,求一条路径,使得这条路经过每个点恰好一次,并且路径上边的权值和最小(或者最大)。或者求一条具有这样性质的回路,这是经典的TSP问题。n = 16 (重要条件,状态压缩的标志)状态?转移?4.2 TSP如何表示一个点集:由于只有16个点,所以我们用一个整数表示一个点集:例如: 5 00000000
展开阅读全文