
——树形DP
FeBr2
(๑•̀ㅂ•́)و✧
展开
-
树形DP总结
状态转移方程: 题型一Q:给出一颗树,每个节点有其价值,如果父节点在,子节点就不能存在,然后求选哪些点能得到最大价值。A:从问题入手,先得出dp[i][j] 表示第i个节点,状态为j (0:不选,1:选)的情况下的价值。 然后再推导除出状态转移方程:dp[i][0] = max ( dp[i-1][1], dp[i-1][0] ) dp[i][1] = dp[i-1][0]题型二Q:给出一颗原创 2016-07-21 21:45:51 · 946 阅读 · 0 评论 -
树形DP——Party a Haili-Bula ( HDU 3342 )
题目链接: http://poj.org/problem?id=3342 分析: 输入数据为字符串,需要与序号绑定,所以需要用到map容器。然后就是树形DP了。 题解: 1.MAP存储:map<string, int> names; map<string, int>::iterator it;int ADD(string x)//加入字符串 { int num; it = nam原创 2016-07-21 20:20:50 · 351 阅读 · 0 评论 -
树形DP——Rebuilding Roads ( POJ 1947 )
题目链接: http://poj.org/problem?id=1947 分析: 求最少删除多少边才能得到一颗含有P节点的子树。从根节点开始往下推能得出dp数组(见问题三)。 题解: 1.用vector建树,存储:for(int i=0;i<=n;i++) vec[i].clear(); //每次先清空vectorfor(int i=1;i<n;i++) { int a,b原创 2016-07-22 11:10:17 · 364 阅读 · 0 评论 -
树形DP(基础篇)—— Anniversary Party ( HDU 1520 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1520 分析: 这种爸爸儿子绑再一块,要么都出现,要么布恩那个同时出现的,就是树形DP了。 题解: 1.先建立结构体,以每个关系为单位,关系的序号为下标,里面包括这条关系里的父亲,与下一个同级关系的序号struct node { int v; int next; }People[/*原创 2016-07-20 22:50:58 · 594 阅读 · 1 评论 -
树形DP——hiho 1055
题目链接: https://hihocoder.com/problemset/problem/1055 分析: 给粗一棵N个节点的树,一共N-1条边,每个节点都有其价值,要求从种选出互相连接的M个节点(包括节点1)使得其价值和最大。 题解: 设dp[i][j]为第i个节点下的选择j个节点时(包括第i个节点)的最大价值。我们先把每一个dp[i][1]都初始化每个节点自己的价值,表示单独选择i节点原创 2016-10-07 15:44:21 · 613 阅读 · 1 评论 -
树形DP——POJ3513
题目链接: http://poj.org/problem?id=3513 题意: 一家人去电影院,这一家人构成一个森林,每个森林都是一棵树。电影院有2种票:家庭票和个人票,买了家庭票,则自己的孩子可以不用买票(指下一代,不包括下下代..),买了个人票,则就是个人票。给出家人票和个人票的价格,求一种购票策略使得最终花费最小(花费相同,则求总票数最小)。最后输出个人票的数量,家庭票的数量和总花费。 分析原创 2017-02-15 13:15:27 · 521 阅读 · 0 评论