树形dp
!
fffefw
这个作者很懒,什么都没留下…
展开
-
poj2342 Anniversary party(树形dp入门题)
http://poj.org/problem?id=2342 题目给你一个n表示总人数,然后又给了n个人的欢乐度,还有n-1个上下级关系。然后要求在n个人里选一些人,并且选的人里任意两人没有直接上下级的关系,问你最多可以选到的欢乐度是多少? 题解:先定义状态dp[i][0]表示第i个人不去,子树i的最大欢乐度,dp[i][1]表示第i个人去,子树i的最大值。dp[i][1]先初始化为i节点的...原创 2018-07-20 09:02:15 · 144 阅读 · 0 评论 -
HDU2196 computer(树上最远距离 + DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2196 题目大意就是给你n个点,还有这n个点的连接关系,然后分别输出这n个点到其他点的最长距离是多少? 这就是个树上最长距离,这题有2种解法,我用的是记忆化搜索,树形dp有时间再补了。如果是对每一个点都当作树的根节点,来一个dfs求最长路的话就太暴力了,会超时,所以就用到了记忆化搜索,每一个搜索的结果到...原创 2018-07-20 16:16:21 · 287 阅读 · 0 评论 -
hdu2376 Average distance (树形dp)
这题主要是求任意两点之间的距离之和。首先通过枚举起点终点来求的话是O(N^2),会超时的,这题要换种思路,通过算每条边的贡献来得到任意两点之间的距离之和,每条边的贡献就是其2端的点数的乘积再乘以对应的边权,求每条边2端的点数就用dfs即可。 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+10; #...原创 2018-09-06 19:27:41 · 231 阅读 · 0 评论 -
第五届新疆省ACM-ICPC程序设计竞赛(重现赛) J.异或的路径
这是一道树形dp题,定义dp[i]表示根到i节点路径的异或和。然后画几组数据可以找到规律,答案是,dp[i]可以dfs求出来,但是这个求和就不好处理了,我当时写的时候误以为异或运算与加法运算满足分配律,把dp[i]提了出来,结果gg了。后来看了大佬的代码才学会了怎么处理这个式子,开一个cnt[]数组,cnt[i]表示第i位为1的dp[j]的个数,,然后对于这个Sigma dp[i]^dp[j] ...原创 2019-06-02 19:56:44 · 285 阅读 · 0 评论 -
P2014 选课 (依赖性背包,树上背包) U53204 【数据加强版】选课(后序遍历优化)
这道背包和普通的背包不一样,这题的物品是有依赖,即要选这个物品必须要先选它的前置物品才行,这就变成了依赖性背包,很明显这样会就产生森林,森林的的话不好处理,加个价值为0的虚拟节点0就可以组成一棵树,那就好处理多了. dp[i][j][k]表示在i的子树里从前j棵子树里取若干个物品放入容量k的包里能得到的最大价值,一般的树形dp里,父节点的dp值都是儿子转移来的。 可以把每个子树视为一个泛化物品...原创 2019-08-17 15:01:34 · 325 阅读 · 0 评论