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的优化的更多相关文章

  1. 树形dp空间优化(dfn)

    树形dp空间优化 介绍 有时题目会告诉我们n叉树的最大层数,或者给出一个完全n叉树树,直接做树形dp会爆空间时,就可以用这个优化方法. 多数树形dp都是先dfs到子树,再合并到根上,显然当合并到根上时 ...

  2. P3994 高速公路 树形DP+斜率优化+二分

    $ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...

  3. Codeforces 1179D 树形DP 斜率优化

    题意:给你一颗树,你可以在树上添加一条边,问添加一条边之后的简单路径最多有多少条?简单路径是指路径中的点只没有重复. 思路:添加一条边之后,树变成了基环树.容易发现,以基环上的点为根的子树的点中的简单 ...

  4. POJ 1155 (树形DP+背包+优化)

    题目链接: http://poj.org/problem?id=1155 题目大意:电视台转播节目.对于每个根,其子结点可能是用户,也可能是中转站.但是用户肯定是叶子结点.传到中转站或是用户都要花钱, ...

  5. HDU - 5909 Tree Cutting (树形dp+FWT优化)

    题意:树上每个节点有权值,定义一棵树的权值为所有节点权值异或的值.求一棵树中,连通子树值为[0,m)的个数. 分析: 设\(dp[i][j]\)为根为i,值为j的子树的个数. 则\(dp[i][j\o ...

  6. Ural 1018 (树形DP+背包+优化)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662 题目大意:树枝上间连接着一坨坨苹果(不要在意'坨'),给 ...

  7. 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)

    有点类似NOI2014购票 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ 这个显然是可以斜率优化的... $\frac {f(j)-f(k)}{dep_j ...

  8. bzoj3672: [Noi2014]购票(树形DP+斜率优化+可持久化凸包)

    这题的加强版,多了一个$l_i$的限制,少了一个$p_i$的单调性,难了好多... 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ $\frac {f(j) ...

  9. P4383 [八省联考2018]林克卡特树lct 树形DP+凸优化/带权二分

    $ \color{#0066ff}{ 题目描述 }$ 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的 ...

随机推荐

  1. minifilter 算是总结吧

    FltRegisterFilter 注册过滤器 FltStartFiltering 开始过滤 InstatanceSetupCallback 实例安装回调 .当一个微过滤器加载的时候,每个存在的卷都会 ...

  2. Nginx 教程 2:性能

    为了获得更好的学习效果,我们建议你在本机安装 Nginx 并且尝试进行实践. tcp_nodelay, tcp_nopush 和 sendfile tcp_nodelay 在 TCP 发展早期,工程师 ...

  3. JS流程控制语句 多重判断满足你各种需求 要在多组语句中选择一组来执行,使用if..else嵌套语句。

    多重判断(if..else嵌套语句) 要在多组语句中选择一组来执行,使用if..else嵌套语句. 语法: if(条件1) { 条件1成立时执行的代码} else if(条件2) { 条件2成立时执行 ...

  4. 杜教筛&套路总结

    杜教筛 \[ \begin{split} (g*f)(i)&=\sum_{d|i}g(d)f(\frac id)\\ \Rightarrow g(1)S(n)&=\sum_{i=1}^ ...

  5. SpringData_04_ JPA中的一对多

    1.JPA中的一对多 在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键, ...

  6. nginx 安装配置信息

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  7. apache netbeans不再集成tomcat

    老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...

  8. RQNOJ--2 开心的金明(01背包)

    题目:http://www.rqnoj.cn/problem/2 分析:这个题目每一种物品都是有"选"或"不选"两种情况. 属于01背包问题.物品的价格相当于背 ...

  9. python基础-re正则

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过 ...

  10. sql语句怎么看效率?

    1.数据库设计当面: 对查询进行优化,应该尽量避免全表扫描,首先应考虑在where及order by设计的列上加索引. d.索引并不是越多越好,索引可以提高查询效率,同时降低了insert和updat ...