![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树形DP
文章平均质量分 56
p__| wYw |__q
这个作者很懒,什么都没留下…
展开
-
C++树形DP初级入门题——The Fair Nut and the Best Path
目录前言题目分析代码后记前言许多新人(包括我)在掌握树形DP时都比较困难。此题为树形DP里还算简单的一道题,适合初学者入门。那么,树形DP是什么呢?我们都已经学过了动态规划,也就是DP。树形DP与DP本质上并无区别,它的特点在于DP状态的转移并不是简单的线性上的转移,树形DP状态的转移依赖的是树(图)。题目原题题面上全是废话(还是英文的),所以我直接来解释题...原创 2019-01-31 22:50:57 · 486 阅读 · 0 评论 -
C++剑指offer:树形DP——较简单的树形DP:重建道路
较简单的树形DP问题 M(1288): 【基础算法】重建道路时间限制:1 Sec内存限制:64 MB题目描述一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了Farmer John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破...原创 2019-03-13 14:04:11 · 351 阅读 · 0 评论 -
剑指offer:C++树上的动态规划——树形DP之背包 LG[P1270]:访问艺术馆
前言此题难度:高难度偏简单。来说下为什么说这道题“高难度偏简单”。如果只看代码的实现以及DP的思路及转移,其实这道题的难道并不是很高。但是这道题的“坑”很多,输入数据的形式也非常变态,对代码实现能力不高的同学简直就是一场煎熬,而且有几个坑也不容易注意到,让我WA了好几次。此题的本质其实也是多重背包,实现起来十分经典,可供初学者参考。题目问题 L(1286): 【基础算...原创 2019-03-12 15:50:02 · 234 阅读 · 0 评论 -
剑指offer:C++树形背包——战略游戏
前言详见树形DP入门题:https://blog.csdn.net/weixin_44049566/article/details/86727140代码#include <iostream>#include <cstring>#include <cstdio>#include <vector>using namespace st...原创 2019-03-11 13:51:38 · 294 阅读 · 0 评论 -
剑指Offer:C++较复杂的树形背包问题(01背包)——有线电视网
前言此题是一道中上难度的树形背包问题。其实质其实就是01背包问题。难点在于状态的转移以及状态转移方程,不同于其他的树形背包题目。应该说很有特点吧,十分适合初学者练练手。没有了解过树形背包的读者可以看看我的这篇博客https://blog.csdn.net/weixin_44049566/article/details/88110155,这样看的时候才不会很困难。题目问题 J(...原创 2019-03-11 13:15:58 · 513 阅读 · 0 评论 -
C++[POJ1849]铲雪车问题——树形DP求出树的直径
[POJ1849]铲雪车问题时间限制:1 Sec内存限制:128 MB题目描述大雪覆盖了整座城市,市政府要求冬季服务部门尽快将一些街道(列在一份清单中)的积雪清除掉以恢复交通。整个城市由许多交叉路口和街道构成,当然任意两个交叉路口都是直接或间接连通的。清单给出了最少的街道,使得这些街道的积雪清除后任意两个交叉路口之间有且仅有一条通路。冬季服务部门有2辆铲雪车和2名司机,这...原创 2019-03-15 14:14:14 · 945 阅读 · 0 评论 -
C++剑指offer:树形DP——河流(riv):较复杂的树形DP 应用多叉树转二叉树的方法
前言先来讲讲我是怎么用四天的时间来做这道题的吧。第一天:看老师的课件,了解了思路,并得知了状态转移方程是如何得出的。第二天:上网查题解,决定不用多叉树转二叉树,用自己的代码打出来。第三天:真香,决定用多叉树转二叉树。第四天:放弃直接动态规划,使用记忆化搜索。这里简单阐述一下我为什么要用多叉树转二叉树与记忆化搜索。第一,如果不用多叉树转二叉树,此题真的会变得非常复杂,不信...原创 2019-03-07 17:30:33 · 320 阅读 · 0 评论 -
剑指offer:C++树形DP基础——二叉苹果树
问题 G(1375): 【基础算法】二叉苹果树时间限制:1 Sec内存限制:64 MB题目描述有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点)。这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是 1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树:现在这颗树枝条太多了,需要...原创 2019-03-14 14:01:42 · 454 阅读 · 0 评论 -
C++剑指offer:[POJ]2631 Roads in the North - 用树形DP的方式求出一棵树的直径
前言此题是道很简单的题(做法不单一,不仅只有树形DP的方法)做完了这道题才发现此题原来是一道求树的直径的题,也就是求树上两个节点的最大距离。题目问题 N(2692): [POJ2631]北极地区的路时间限制:1 Sec内存限制:128 MB题目描述寒冷、人烟稀少的北极地区修建与维护道路时非常昂贵的。因此,修路时只会在任意两个村子之间形成一条唯一的路径,并且中途...原创 2019-03-14 13:36:49 · 278 阅读 · 0 评论 -
C++剑指offer:树形DP之树上的有依赖性的背包问题——选课
前言此题为初学树形DP的学者们必做的一道题。因为此题涉及到了树上的背包问题,它的依赖性被抽象成了点与点之间的关系,也就是一棵树。学会了这道题,其他的树形背包也万变不离其中。此题可以说是一道比较简单的题,并没有许多复杂的关系,所以很适合初学者们。介意之前没学过树形DP的同学先去预习一下树形DP入门题,了解一下树形DP用dfs实现的最基础的结构。题目问题 H(1376): 【基础...原创 2019-03-04 13:29:15 · 1251 阅读 · 2 评论 -
C++高级算法之树形DP——如何找树的重心(包看包懂)
前言最近在学树形DP,感触颇多。下面就写出来了。题目问题 C(2078): 求树的重心时间限制:1 Sec内存限制:128 MB题目描述树的重心定义为树的某个节点,当去掉该节点后,树的各个连通分量中,节点数最多的连通分量其节点数达到最小值。树可能存在多个重心。如下图,当去掉点1后,树将分成两个连通块:(2,4,5),(3,6,7),则最大的连通块包含节点个数为3。...原创 2019-02-12 17:29:41 · 1446 阅读 · 1 评论 -
C++树形DP入门题——Anniversary Party
目录前言题目大意分析代码后记前言发现这个月快完了还没写几篇博客,于是来水水博客hhh这篇博客如果没有树形DP的基础比较难看懂,所以可以先看看这篇博客那么我们就直接切入正题看题面吧。题目大意在一个很强大的公司,有n个职员,每个职员都有唯一一个上司。这些职员在自己那唯一一个上司在时是不会来参加派对的。每个职员有一个开心指数。求来了的职员的最大开心指数。...原创 2019-01-31 23:06:43 · 484 阅读 · 0 评论