部分树形DP的优化
ural1018. Binary Apple Tree
题目大意
有一棵n个节点的树,树上每个节点有一个值,选择m个节点使这些节点值的和最大
要求:如果选当前节点,则必须选它的父节点
解法:
我们设dp[i][j]为以i为根的树上留j个节点的最大值,转移方法如下
for(int j=min(q,size[x]);j>;j--){//size表示子树的大小
for(int k=min(j-,size[v]);k>;k--){//因为父节点要保留所以j-k要>=1
dp[x][j]=max(dp[x][j],dp[v][k]+dp[x][j-k]);//v为x的子节点
}
}
复杂度O(n*m^2)
“金明的预算方案”加强版
题目大意
有一棵n个节点的树,树上每个节点有一个代价和一个价值,选择若干个节点使这些节点的价值最大并且代价不超过m
要求:如果选当前节点,则必须选它的父节点$n\le 5000,m\le 10000$
题解:
如果还像上一题那样考虑的话,dp[i][j]为以i为根的子树代价为j的最大价值,
共有m*n个状态,每个状态O(m)转移,复杂度O(m*m*n),虽然达不到那么高,但也一定会超时
考虑优化
首先将所有节点后序遍历,p[i]保存dfs序为i的节点编号,
l[i]保存在i节点的子树之前遍历的最后一个dfs序,如下图

节点右侧的为节点的dfs序,左上角的为l的值:
如p[4]=7,l[7]=3代表7号节点dfs序为4,在7节点的子树之前遍历的最后一个dfs序为3
然后将dp[i][j]的意义改为前i个遍历的节点代价为j的最大值
dp[i][j]=max(dp[l[u]][j](当前节点不选,则子树都不能选),dp[i-1][j-v[u]]+w[u](选当前节点)) 注:u=p[i];
于是状态转移变成O(1)了,时间复杂度O(n*m)
思考一下上一题是否也可以这样优化?
只需将dp[i][j]的意义改为前i个遍历的节点留j个的最大值即可,其他转移都一样
部分树形DP的优化的更多相关文章
- 树形dp空间优化(dfn)
树形dp空间优化 介绍 有时题目会告诉我们n叉树的最大层数,或者给出一个完全n叉树树,直接做树形dp会爆空间时,就可以用这个优化方法. 多数树形dp都是先dfs到子树,再合并到根上,显然当合并到根上时 ...
- P3994 高速公路 树形DP+斜率优化+二分
$ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...
- Codeforces 1179D 树形DP 斜率优化
题意:给你一颗树,你可以在树上添加一条边,问添加一条边之后的简单路径最多有多少条?简单路径是指路径中的点只没有重复. 思路:添加一条边之后,树变成了基环树.容易发现,以基环上的点为根的子树的点中的简单 ...
- POJ 1155 (树形DP+背包+优化)
题目链接: http://poj.org/problem?id=1155 题目大意:电视台转播节目.对于每个根,其子结点可能是用户,也可能是中转站.但是用户肯定是叶子结点.传到中转站或是用户都要花钱, ...
- HDU - 5909 Tree Cutting (树形dp+FWT优化)
题意:树上每个节点有权值,定义一棵树的权值为所有节点权值异或的值.求一棵树中,连通子树值为[0,m)的个数. 分析: 设\(dp[i][j]\)为根为i,值为j的子树的个数. 则\(dp[i][j\o ...
- Ural 1018 (树形DP+背包+优化)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662 题目大意:树枝上间连接着一坨坨苹果(不要在意'坨'),给 ...
- 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)
有点类似NOI2014购票 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ 这个显然是可以斜率优化的... $\frac {f(j)-f(k)}{dep_j ...
- bzoj3672: [Noi2014]购票(树形DP+斜率优化+可持久化凸包)
这题的加强版,多了一个$l_i$的限制,少了一个$p_i$的单调性,难了好多... 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ $\frac {f(j) ...
- P4383 [八省联考2018]林克卡特树lct 树形DP+凸优化/带权二分
$ \color{#0066ff}{ 题目描述 }$ 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的 ...
随机推荐
- minifilter 算是总结吧
FltRegisterFilter 注册过滤器 FltStartFiltering 开始过滤 InstatanceSetupCallback 实例安装回调 .当一个微过滤器加载的时候,每个存在的卷都会 ...
- Nginx 教程 2:性能
为了获得更好的学习效果,我们建议你在本机安装 Nginx 并且尝试进行实践. tcp_nodelay, tcp_nopush 和 sendfile tcp_nodelay 在 TCP 发展早期,工程师 ...
- JS流程控制语句 多重判断满足你各种需求 要在多组语句中选择一组来执行,使用if..else嵌套语句。
多重判断(if..else嵌套语句) 要在多组语句中选择一组来执行,使用if..else嵌套语句. 语法: if(条件1) { 条件1成立时执行的代码} else if(条件2) { 条件2成立时执行 ...
- 杜教筛&套路总结
杜教筛 \[ \begin{split} (g*f)(i)&=\sum_{d|i}g(d)f(\frac id)\\ \Rightarrow g(1)S(n)&=\sum_{i=1}^ ...
- SpringData_04_ JPA中的一对多
1.JPA中的一对多 在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键, ...
- nginx 安装配置信息
#user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...
- apache netbeans不再集成tomcat
老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...
- RQNOJ--2 开心的金明(01背包)
题目:http://www.rqnoj.cn/problem/2 分析:这个题目每一种物品都是有"选"或"不选"两种情况. 属于01背包问题.物品的价格相当于背 ...
- python基础-re正则
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过 ...
- sql语句怎么看效率?
1.数据库设计当面: 对查询进行优化,应该尽量避免全表扫描,首先应考虑在where及order by设计的列上加索引. d.索引并不是越多越好,索引可以提高查询效率,同时降低了insert和updat ...