泛化背包问题
来源:互联网 发布:左右删失数据 编辑:程序博客网 时间:2024/05/20 09:10
简写,笔录,不写太多。
概要:
给出若干物品,对于每个物品的投入x,会得到一个特定回报f(x)
已知总投入为M元,求能得到的最大回报N元。
方程即为:dp(x) = max{ dp(x),dp(a) + l(x-a)} (A式) .这是对于线性数据而言的,没有依赖关系。
在树上学习到了一个很厉害的写法:
一般来说,如果是要把 A式 用在树规上, 时间大概在 O(N^3)
转换一个巧妙地表达方法即可压缩到 O(N^2)
描述:
dfs(int root , int m) //m表示总投入
对于每一个子节点:
f[subtree][i] <- f[root][i] i=0,1,2....m-1
dfs(subtree,i);
f[root][i] = f[subtree][i-1] + value[i]; i = 0,1,2.....m
讲白,就是每次处理子节点,先把root的值赋进去,然后在进行递归搜索,为什么这样是有用的?
我们知道,如果反复使用A式求解的话 , 事实上每次动规都没有和父节点联系起来,而是在所有数据处理完了以后,再进行计算。
这就浪费了大量的时间。
把父节点的值回代,使得父节点成为整个动态规划的一部分。因为父节点的值对于子树的计算过程没有丝毫影响,计算完毕后,直接更新父节点的值。有点类似于线段树的“有了标记要值还有什么用”(哈哈哈哈)
//注
第一个循环到m-1 ,因为如果你要考虑使用这个节点,本身也需要使用,那么能够分配给这个节点的子树的投入只有m-1个了
- 背包问题-泛化物品
- 泛化背包问题
- 泛化物品的背包问题
- P08泛化物品的背包问题
- 背包问题之八 P08: 泛化物品
- hdu3593泛化背包
- HDU1561 树形dp,泛化背包
- 混合背包与泛化背包(未完成)
- 【背包九讲】P08: 泛化物品
- HDOJ 1561 - 树形DP,泛化背包
- POJ 1285 - Combinations, Once Again 泛化背包
- poj 1155 TELE(树形泛化背包dp)
- POJ 1285 - Combinations, Once Again 泛化背包!
- poj 1155 TELE 树形dp泛化背包
- 树形DP+背包(poj1155泛化分组背包)
- POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..
- POJ 1155 - TELE 树形DP(泛化背包转移)..
- HDOJ 4044 - GeoDefense 树形DP..泛化背包转移..
- String.trim()
- 欢迎使用CSDN-markdown编辑器
- 使用virtualbox安装Linux系统
- 计算三角形面积的页面
- softmax_linear_classifier
- 泛化背包问题
- DOM中的兄弟节点
- C++与多线程的线程安全
- CentOS 7设置ssh服务自动启动
- Maven的介绍与安装
- iOS 面试常见问题最全梳理(转)
- gRPC使用的分析
- final,fianlly,fianlize的区别?
- Comparable接口的实现和使用