网站大量收购闲置独家精品文档,联系QQ:2885784924

树形dp与优化方法.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划 树形 动规与优化方法 聚会的快乐 你要组织一个由你公司的人参加的聚会。你希望聚会非常愉快,尽可能多地找些有趣的热闹。但是劝你不要同时邀请某个人和他的上司,因为这可能带来争吵。给定N个人(姓名,他幽默的系数,以及他上司的名字),编程找到能使幽默系数和最大的若干个人。 【输入】 第一行一个整数N(N100)。接下来有N行,每一行描述一个人的信息,信息之间用空格隔开。姓名是长度不超过20的字符 串,幽默系数是在0到100之间的整数。 【输出】 所邀请的人最大的幽默系数和。 【样例】 party.in party.out 5 8 BART 1 HOMER HOMER 2 MONTGOMERY MONTGOMERY 1 NOBODY LISA 3 HOMER SMITHERS 4 MONTGOMERY 分析 首先,很显然公司的人员关系构成了一棵树。设f[a]为a参加会议的情况下,以他为根的子树取得的最大幽默值;g[a]为a不参加会议的情况下,以他为根的子树取得的最大幽默值。那么,状态转移方程就是: f[a]=g[b1]+g[b2]+…+g[bk]+1 g[a]=max(f[b1], g[b1])+max(f[b2], g[b2])+…+max(f[bk], g[bk]) 其中b1, b2, …, bk为a的子结点。 最后的答案就是max(f[root], g[root]),root是树根。 三色二叉树(tro) 见文本 树形动态规划(皇宫看守) 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫。皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。可是陆小凤手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。编程任务:帮助陆小凤布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。 数据输入:输入数据由文件名为INPUT.TXT的文本文件提供。输入文件中数据表示一棵树,描述如下: 第1行 n,表示树中结点的数目。 第2行至第n+1行,每行描述每个宫殿结点信息,依次为:该宫殿结点标号i(0i=n),在该宫殿安置侍卫所需的经费k,该边的儿子数m,接下来m个数,分别是这个节点的m个儿子的标号r1,r2,...,rm。   对于一个n(0 n = 1500)个结点的树,结点标号在1到n之间,且标号不重复。数据输出:输出到OUTPUT.TXT文件中。输出文件仅包含一个数,为所求的最少的经费。 输入数据示例       输出数据示例 25 问题分析 求给定的带权树的符合下面条件的子顶点集合V:  1. 若点i∈V,则所有与i相邻的点j可被标号。  2. 任意一个点j,若j不属于V,则j可被标号。  3. S=∑(Weight[i],i∈V),并且S最小。 考虑到树本身的特性:除了根节点外,每一个节点都仅与该节点的父节点与儿子节点有关系;大多数情况下,每个节点的状况都是由它的儿子节点的状况决定的。这与动态规划的无后效性要求相符,再加上本题求的又是最优方案,这一切都与动态规划算法不谋而合。 要求覆盖以节点i为顶点的树的最佳方案Vi,显然只需考虑节点i属于或不属于集合V两种情况,两者择优即可。即Vi=min{Vi1,Vi2}(1表示属于,2表示不属于)      (一)若i∈V,则对于i的任一儿子j,也只有属于或不属于集合V两种情况: (1)若j∈V,则问题转化到求Vj1的小一级规模问题,转化成功; (2) 若j不属于V,则要不求Vj2,要不就是j不能被j的任意一个儿子标号,则求所有Vk(k为j的儿子),Vi1求好了。 (二)若i不属于V,i一定要能被i的某个儿子j标号,这时求所有Vj(j为i的儿子)。若所有的j都是j被j的儿子标号时最“省”(即所有Vj= Vj2),那么实际上按这样的方案没有一个j∈V,造成了i不能被标号。 这时只要找一个牺牲最小的i的儿子j,把方案Vj2换成Vj1。这样就求出了覆盖以节点i为顶点且不包括节点i的最佳节点集Vi2。 状态转移方程 通过上面的分析,我们很容易得到下面这组状态转移方程:  F(i)=min{F(i,1),F(i,2)}  F(i,1)=Weight(i)+∑min{F(j),∑min{F(k,1),F(k,2)}}  F(i,2)=∑F(j);若所有F(j)F(j,1),则换取代价最小的F(j,2)     (以上j为i儿子,k为j儿子) 边界条件     F(i)

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档