什么是树型动态规划.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么是树型动态规划

什么是树型动态规划 u 顾名思义,树型动态规划就是在“树”的数据结构上的 动态规划,平时作的动态规划都是线性的或者是建立在 图上的,线性的动态规划有二种方向既向前和向后,相 应的线性的动态规划有二种方法既顺推与逆推,而树型 动态规划是建立在树上的,所以也相应的有二个方向: u 根—叶:不过这种动态规划在实际的问题 中运用的不多,也没有比较明显的例题, 所以不在今天讨论的范围之内。 u 叶-根:既根的子节点传递有用的信息给 根,完后根得出最优解的过程。这类的习 题比较的多,下面就介绍一些这类题目和 它们的一般解法。 例题一:HDU 2412 PARTY AT HALI-BULA u 题目大意: u n个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的 唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2 个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且 求出获得最大人数的选人方案是否唯一。 u 这是一个经典的树型动态规划。 u 状态? u 转移? 1.2 Party at Hali-Bula u 简单的染色统计是不正确的 1.3 Party at Hali-Bula u 人之间的关系形成树型结构 u DP, 用dp[i][0]表示不选择i点时,i点及其子树能选出的 最多人数,dp[i][1]表示选择i点时,i点及其子树的最多 人数。 1.4 Party at Hali-Bula u 状态转移方程: u 对于叶子节点dp[k][0] = 0, dp[k][1] = 1 u 对于非叶子节点i, u dp[i][0] = ∑max(dp[j][0], dp[j][1]) (j是i 的儿子) u dp[i][1] = 1 + ∑dp[j][0] (j是i 的儿子) u 最多人数即为max(dp[0][0], dp[0][1]) u 如何判断最优解是否唯一? 1.5 Party at Hali-Bula u 新加一个状态dup[i][j],表示相应的dp[i][j]是否是唯一 方案。 u 对于叶子结点, dup[k][0] = dup[k][1] = 1. u 对于非叶子结点, u 对于i 的任一儿子j ,若(dp[j][0] dp[j][1] 且dup[j][0] == 0) 或 (dp[j][0] dp[j][1] 且dup[j][1] == 0) 或 (dp[j][0] == dp[j][1]),则dup[i][0] = 0 u 对于i 的任一儿子j有dup[j][0] = 0, 则dup[i][1] = 0 例题二:STRATEGIC GAME u 题目大意: u 一城堡的所有的道路形成一个n个节点的树,如果在一 个节点上放上一个士兵,那么和这个节点相连的边就会 被看守住,问把所有边看守住最少需要放多少士兵。 u 典型的树型动态规划 u 状态? u 转移? 2.2 Strategic game u dproot[ i ]表示以i为根的子树,在i上放置一个士兵,看 守住整个子树需要多少士兵。 u all[ i ]表示看守住整个以i为根的子树需要多少士兵。 2.3 Strategic game u 状态转移方程: 叶子节点:dproot[k] =1;all[k] = 0; 非叶子节点: dproot[i] = 1 + ∑all[j](j是i的儿子); all[i] = min( dproot[i], ∑dproot[j](j是i的儿子) ); 例题三 CF 337D Book of Evil u 题意:在一颗树上,给m个点,求到所有m个点距离不

文档评论(0)

suijiazhuang1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档