树型动态规划就是在“树”的数据结构上的动态规划,树型动态规划是建立在树上的,所以有二个方向: 1.根—>叶:这种题目基本上碰不到 2.叶->根:根的子节点传递有用的信息给根,完后根得出最优解的过程。这种的题目是树型动态规划的最常见类型。 首先定义

       无根树:题目中可以以任意节点为根建树,经过动态规划后即可直接得到最优值。
有根树:必须以某一个节点为根建树才能通过动态规划后得到最优值。

基本上有这样一个步骤:

一、有根树:

      1.建树(一般以递归方式实现,有时数据过大以BFS方式实现)
      2.在建树中找到叶子的时候特别赋值。
      3.回溯时通过方程确定出每个节点的最优值并记录。
      4.遍历完整棵树后一般以根节点值作为最终值。
补充:关于建树,有很多时候会将原来的多叉树改造为左孩子右兄弟的二叉树,以下两道例题用到了这种改造。
例题1:Tyvj P1051 选课
例题2:Vijos P1518 河流(IOI2005 Rivers)
//简单的改造代码:
for i:=1 to n do
if ft[root[i]]=false then//这个节点目前还没有孩子
begin
a[root[i]].left:=i;//把这玩意儿放到当前节点的左边
ft[root[i]]:=true;//标记-有孩子了
num[root[i]]:=i;//该节点当前最后一个孩子
end
else//有孩子了
begin
a[num[root[i]]].right:=i;//把这玩意儿给他当前最后一个孩子的右边
num[root[i]]:=i;
end;//By 澹台彦澍

二、无根树:

      1.随机定根,重复有根树过程
2.要枚举节点作为根的情况重复有根树过程。
例题:Vijos P1100 加分二叉树(NOIp2003第三题)

最新文章

  1. git 查看某文件的修改历史
  2. Java集合面试题
  3. Android中各种Drawable总结
  4. Ajax与json在前后端中的细节解惑
  5. JS重点特性——闭包详解
  6. JQuery-筛选
  7. Tornaod框架
  8. C#中判断文件夹中存在某个txt文本
  9. Winform开发常用控件之Checkbox和CheckedListBox
  10. swiper 多个循环的实现
  11. Linux下Tomcat catalina.out自动归档,以及logrotate 配置详解
  12. javascript call和apply
  13. Beta Scrum Day 1
  14. ycmd for emacs 代码自动补全
  15. base编码解码
  16. c#dev gridview 设置隔行换色等
  17. Spring Security(十五):5.6 Authentication
  18. shadowMap
  19. Java 实现异步调用
  20. (常用)re模块

热门文章

  1. Python核心编程读笔 13:执行环境
  2. JSP基础——关于中文乱码问题
  3. Using Apache with SSL1(转载)
  4. JavaWeb核心编程之(三.4)Servlet Context 配置
  5. 精读《javascript高级程序设计》笔记一——基本概念
  6. 方形图片转动并转换成圆形CSS特效
  7. JS中格式化数据保留两位小数
  8. C#学习日志 day 5 plus------ interface 数组及stringBuilder相关
  9. 如何在C++中获得完整的类型名称(RTTI的typeid在不同平台下有不同的输出值表达,自建类改进了RTTI丢失的信息)
  10. 链表-Add Two Numbers