树形依赖动态规划
来源:互联网 发布:上海网络推广铭心 编辑:程序博客网 时间:2024/05/23 19:49
定义
树形依赖动态规划一般为背包问题,依赖就是指儿子依赖于父亲的树形动态规划,一般形式为只有选择了父亲节点才能选择儿子节点,对于这一种特殊的树形动态规划,有一种时间复杂度十分优秀的的方法可以解决此类问题。
举个例子
先来一道例题,给出一棵有
普通做法
设
由于每次合并的复杂度为
{ int i,j,l,k; fo(i,1,g[o])dg(son[o][i]); fo(i,1,g[o]) fd(j,m-P[o],P[son[o][i]]) fo(l,P[son[o][i]],j) f[o][j]=max(f[o][j],f[son[o][i]][l]+f[o][j-l]); fd(i,m,P[o])f[o][i]=f[o][i-P[o]]+V[o];}
特殊做法
上述做法显然会超时。
我们分析一下为什么这样做时间复杂度这么大了,每一次合并的时间复杂度为
首先求出整棵树的
设
按照
如果当前选择第
给出一张转移的简略草图,帮助理解。
注,黄色线表示第一种转移,即不选择第i个点的转移,红色线为第二种转移。
- 树形依赖动态规划
- 动态规划--树形依赖背包
- 树形动态规划
- 树形动态规划
- 树形动态规划
- 选课 树形动态规划
- 将功补过 树形动态规划
- 电子眼 树形动态规划
- 树形动态规划总结
- 树形动态规划总结
- 树形动态规划
- 树形动态规划
- 【专题】树形动态规划
- 【动态规划】树形动态规划专题
- 动态规划之树形动态规划
- 区间动态规划及树形动态规划
- BZOJ2427 浅谈TARJAN缩点 和 树形依赖背包动态规划
- hdu_1054_树形dp动态规划
- WebService访问数据
- Python正则表达式
- (lintcode)第16题 带重复元素的排列
- MySQL笔记【持续更新……】
- Java中==和equals的区别
- 树形依赖动态规划
- C++ List的用法(整理)
- 领域驱动设计,读书笔记:4 绑定模型和实现
- Android源码硬件加速简析
- Leetcode659——Split Array into Consecutive Subsequences
- 学习笔记-IO流-系统输出
- 【美团】最大矩形面积(分治法)
- 模式识别绪论
- 操作mysql数据库,出现中文乱码如何解决?