- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2014信息学奥林匹克夏令营-day4树形DP(洪鑫焰)
常州市第一中学 洪鑫焰
引言
树形结构是信息学奥赛中重要的数据结构模
型之一,有关树形结构的试题在竞赛中也经
常出现。鉴于在树形结构上使用动态规划算
法已成为近年来信息学奥赛的考察热点,本
文将重点围绕动态规划算法在树形结构上的
应用进行阐述。首先对树形结构的特点和动
态规划的应用条件进行简要介绍,然后对动
态规划在树形结构上的各种应用进行举例说
明,最后进行总结,并提供了几个实战题目。
树形结构的主要特点
1、在一棵树里,除了根节点以外的所有
节点有且只有一个父亲节点,根节点没有
父亲节点。除了叶子节点外,所有的节点
有一个或多个孩子节点,叶子节点没有孩
子节点。
2、一棵树里任意两个节点之间都有且只
有一条通路,如果把任意一节点与其相邻
节点之间的通路看作一条无向边的话,那
么一棵树里没有环及重边的存在。因此,
一棵有N个节点的树恰好有N-1条边。
3、树是具有递归结构的。一个节点即是
一棵树,而一棵有孩子节点的树,若其根
节点为a节点,则其任意一个孩子节点b,
与所有不用通过a节点即可和b相连的节点
也构成一棵树,称为以b为根的a的一棵子
树。b的任意一棵子树也是a的一棵子树。
4、树是具有层次性的。如果一棵树是有
根的,那么某个节点a的深度
d(a)=d(father(a))+1,其中father(a)为
a的父亲节点。特别的,d(root)=1。
5、对于一棵树进行深度 (或宽度)优先遍
历后,每个节点的孩子节点的时间戳都是
大于该节点的。
树的遍历
对一棵树的遍历一般有两种途径。第一种
是深度优先遍历,第二种是宽度优先遍历,
这两种遍历方法对一棵树进行遍历后,会
得到不同的遍历顺序。在一般的使用中,
这两种遍历都是十分重要的。
以深度优先遍历为例,我们可以写出如下伪代
码:
void dfs(x){
x的时间戳=++time;
对于x的每个孩子y,
dfs(y)
}
这种深度优先遍历的时间复杂度是O(N),N为树
中的节点数。
动态规划算法必须满足的条件
1、阶段性。整个问题的求解可以划分为
若干个阶段的一系列决策过程(与树的层
次性相对应 )。
2、最优子结构性质。一个最优化策略具
有这样的性质,不论过去状态和决策如何,
对前面的决策所形成的状态而言,余下的
诸决策必须构成最优策略。简而言之,一
个最优化策略的子策略总是最优的(与树
的递归结构相对应 )。
3、无后效性。将各阶段按照一定的次序
排列好之后,对于某个给定的阶段状态,
它以前各阶段的状态无法直接影响它未来
的决策,换句话说,每个状态都是过去历
史的一个完整总结(与dfs的时间戳特点
相对应 )。
例1
周年庆宴 Hdu 1520 Anniversary party
【题目描述】
Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他
的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职
员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数之和
最大。但是,没有职员愿和直接上司一起与会。
【输入格式:】
第一行一个整数N。(1=N=6000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128=Ri=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行0 0表示结束。
【输出格式】
输出最大的快乐指数和。
【 样例输入】 【样例输出】
7 5
1
1
1
1
1
1
文档评论(0)