摘要:
传送门 这是一道神奇的树形DP,对它还是不需要建树,而且完全可以一边读入,一边DP出结果…… 首先我们看题目描述很显然是一棵二叉树,而且还是完全二叉树。(没啥卵用) 令dp[i][j]表示在第i个节点选取花费j时间所能获取的最大画数。 之后因为题目的输入是递归给出的……所以我们直接去建图难度很大,不 阅读全文
摘要:
传送门 又是熟悉的遍历题……好了又不会了。 这是一道很神奇的题,虽然可以称为树形DP但是它不需要建树! 首先,因为中序遍历每个连续的一段都对应一棵子树,所以我们完全可以使用区间DP的方法去把小区间合并成大区间来计算。 使用dp[i][j]表示区间i,j之内(也就是一棵子树)的最高加分。特殊的,dp[ 阅读全文
摘要:
传送门 仍然是一道标准的树形DP。 我们其实不必纠结到底剩余的钱数是多少,那并不重要,我们只关心其是否大于0。而且我们其实要求的是能连接的最大用户数。 用dp[i][j]表示在第i个节点连接了j个客户的最大利润。那么得到: dp[i][j] = max(dp[i][j],dp[i][j-k] + d 阅读全文
摘要:
传送门 这道题是典型的树形DP。 因为我们发现有一条性质,那就是对于一根枝条,你选择了它的话你也必须同时选择从这根枝条到根的所有枝条。 我们使用dp[i][j]表示对于第i个节点,保留j根枝条所能获得的最大苹果树,那么就有: dp[i][j] = max(dp[i][j],dp[i][j-k-1] 阅读全文
摘要:
传送门 这题什么玩意……提示说这是个平衡树题,不过一来我没看出这是平衡树,二来我早忘了怎么写平衡树了。 我想到的是用线段树解决。前两个摧毁和重建的操作都只需要进行单点修改,而第三个操作,我的想法就是找到这个点左边最靠右的一间被摧毁的屋子和右边最靠左的一间被摧毁的屋子。 我们把所有点的权值一开始设成1 阅读全文
摘要:
传送门 这题咋做呀……?一开始我的想法贼啦复杂也没法实现(实际就是不会) 后来看了dalao的想法之后明白了,如果在给定前后序的情况下中序遍历出现不同的情况,那么必然是树中有一些只有一个儿子的节点(因为这样树就是不定型的) 每出现这样一个节点,结果就会×2。 那我们还要去建树递归求只有一个儿子的节点 阅读全文
摘要:
传送门 一道很简单的树形DP。 树形DP是啥?看名字就知道是在树上进行DP。树形DP的不同在于,对于一个节点,他的状态必然是由其子节点而不是其他节点转移过来的。 树形DP有啥技巧我也说不清……直接来几道题看看吧。 首先看这道题。这题就是要求在树中选取一棵子树,使得其权值和最大。 DP过程还是很显然的 阅读全文
摘要:
传送门(又是一道很水的题) 这题我竟然还使用了类似线段树的思想……就是先递归到最底下一层之后读入,然后依次向递归返回更新答案。 感觉没啥可说的……直接看代码吧。 阅读全文
摘要:
这里说一道很水的题…… 通过后序遍历和中序遍历求前序遍历。 首先说一下这都是什么遍历方式……(蒟蒻已经全忘了) 简单地说,前序遍历就是访问根节点->左子树->右子树 中序遍历就是访问左子树-根节点-右子树 后序遍历则是访问左子树-右子树-根节点(当然以上规则是对于二叉树适用) 这样的话,我们就可以通 阅读全文
摘要:
传送门 最近搞一搞树型结构……毕竟自己树的知识学的太垃圾了。 首先这道题非常明显要求树的直径。树的直径有好多好多种求法,这里我选择了一位dalao的非常简洁的dfs的方法。先看一下代码。 代码非常的简短。具体的思想也很好理解,就是依次向下dfs,然后使用fa来记录在直径上都有哪些点。不过这个使用的时 阅读全文