
树形dp
yxg_123
这个作者很懒,什么都没留下…
展开
-
CDOJ 1136 邱老师玩游戏 树形01背包 (有依赖的背包问题)
点击打开链接第一种思路:建立森林,dp[i][k]表示森林中在第i颗树中选k个的最大价值 , dp2[j]表示选j个的最大价值,对于每颗树,都更新一次。转移方程:dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[v][k]);dp2[j] = max(dp2[j],dp2[j-k]+dp[i][k]);代码:#include #include原创 2017-02-19 00:42:19 · 939 阅读 · 0 评论 -
BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
点击打开链接思路:树上dp,每个点的权值为d[i]+G[i].size(),然后选择最小的删除就好代码:#include #include #include #include #include using namespace std;const int maxn = 2000000+10;vector G[maxn];int n,m,d[maxn],ans;boo原创 2017-02-20 16:25:42 · 225 阅读 · 0 评论 -
bzoj2435: [Noi2011]道路修建 树上dp
点击打开链接RE了一辈子...思路:树上dp,直接dfs找到每个点v的子节点有多少, 那么对答案的贡献是 w*abs((n-size[v])-size[v]);RE代码:#include using namespace std;typedef long long ll;const int maxn = 1100000;vector > E[maxn<<1];ll siz原创 2017-02-20 21:41:55 · 223 阅读 · 0 评论 -
zoj3626 Treasure Hunt I 树上DP
点击打开链接题意:给你一颗树,然后每个点有一个价值,每个边有一个代价,然后问你,从k点出发,花费最多m/2的代价,能够取得最多的价值是多少。思路:树上背包问题,dp[i][j]表示从i点出发,花费j的代价所能取得的最大价值是多少。转移方程为 dp[i][j]=max(dp[i][j],dp[i][m-k-t[i][v]]+dp[v][k]) 就是以u为父节点 走不走v这个点原创 2017-02-23 19:39:54 · 253 阅读 · 0 评论 -
紫书动规 P282的问题 hdu2196 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196题意:题解:http://blog.youkuaiyun.com/shuangde800/article/details/9732825 f[i][0],表示顶点为i的子树的,距顶点i的最长距离 f[i][1],表示Tree(i的父节点)-Tree(i)的最长距离+i跟i的父节点距离要求所有的f[i][0]原创 2017-03-16 21:34:58 · 246 阅读 · 0 评论 -
紫书动规 例题9-12 UVA - 12186 Another Crisis 树形dp
题目链接:https://vjudge.net/problem/UVA-12186题意:题解:d[u]:=让u给上级发信最少需要多少工人。假设u有k个节点,则至少c=(kT-1)/100+1个直接下属发信才行。 把所有子节点的d值从小到大排序,取前c个加起来就是当前的答案。代码:#include <bits/stdc++.h>using namespace std;typedef long lo原创 2017-03-16 22:32:54 · 372 阅读 · 0 评论 -
紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp
题目链接:https://vjudge.net/problem/UVA-1220题意:题解:树形dp: 树的最大独立集问题 d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{max(d[v][0],d[v][1]} d[u][1]:=选u能得到的最大人数 d[u][1]=sum{d[v][0]} 判断唯一性就是看当前点的孩子是不是不唯一的。初始唯一代码:#includ原创 2017-03-17 00:00:30 · 300 阅读 · 0 评论