动态规划-树形dp
文章平均质量分 79
iHge2k
专注数据结构和算法
展开
-
poj 1463(树形dp)
题目链接:http://poj.org/problem?id=1463思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #de原创 2014-05-26 18:08:15 · 329 阅读 · 0 评论 -
hdu 1011(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011思路:dp[i][j]表示以i为根的子树派遣j个士兵占领的最大价值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 1原创 2014-05-26 18:06:05 · 376 阅读 · 0 评论 -
hdu 2412(树形dp)
题目链接:http://code.hdu.edu.cn/showproblem.php?pid=2412思路:这篇文章讲的很清楚:http://wenku.baidu.com/view/84164e1a227916888486d7d6.html 。 1 #include 2 #include 3 #include 4 #include 5 #include 6原创 2014-05-26 18:06:07 · 354 阅读 · 0 评论 -
poj 1935(树形dp)
题目链接:http://poj.org/problem?id=1935思路:首先我们考虑从源点出发到所有自己想要经过的点然后在回到源点sum,显然每条边都必须经过源点(这个我们可以一次dfs求出),但题目的意思是可以不用回到源点,那么我们可以再求源点到所有要经过的点的最远距离ans,于是答案便是sum-ans. 1 #include 2 #include 3 #includ原创 2014-05-26 18:08:07 · 492 阅读 · 0 评论 -
loj 1357(树形dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1357 1 #define _CRT_SECURE_NO_WARNINGS 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8原创 2014-05-26 18:09:39 · 571 阅读 · 0 评论 -
poj 2486( 树形dp)
题目链接:http://poj.org/problem?id=2486思路:经典的树形dp,想了好久的状态转移。dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从i出发走了j步最后回到i。于是我们把所有到情况归结为3种:1、从u(v是其中一颗子树)出发,走了j步,最后停在了v,则有dp[u][j+1][0]=max(dp[u][j+1][0],dp[u]原创 2014-05-26 18:08:05 · 400 阅读 · 0 评论 -
hdu 4705(树形DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4705思路:反面考虑,用总的方案数减去A,B,C三点在同一路径上的方案数。于是我们可以确定中间点B,在当前以B为根求得的son中任选一个,在剩下的节点n-tmp-1(tmp为已经求得的B的儿子的个数)中任选一个,产生tmp*(n-tmp-1)中组合。 1 #include 2 #in原创 2014-05-26 18:04:21 · 680 阅读 · 0 评论 -
hdu 4714(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714思路:其实就是求树的分支数,然后就是分支数*2+1(要删边,加边变成直线最后在成环)。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #defi原创 2014-05-26 18:06:15 · 496 阅读 · 0 评论 -
hdu 3899(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3899思路:num[u]表示u以及u的子树的队伍数的总和,dist[u]表示u到根节点的距离,dp[u]表示以u为根时的总花费。我们可以先做一次dfs算出树上所有点到根节点(1)的花费总和,然后同时计算出num[],然后就是又一次dfs算出以每个点为根的话费,这里有dp[v]=dp[u]+(sum-原创 2014-05-26 18:06:18 · 405 阅读 · 0 评论 -
hdu 4003(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003思路:dp[i][j]表示以i为根选择j个机器人的最小花费,然后就是背包了:dp[u][i]=min(dp[u][i],dp[u][i-j]+dp[v][j]+j*w)(1 1 #include 2 #include 3 #include 4 #include 5原创 2014-05-26 18:06:20 · 313 阅读 · 0 评论 -
hdu 1561(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561思路:dp[u][i]表示以u为根的树选了i个子节点。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 222 8原创 2014-05-26 18:06:26 · 328 阅读 · 0 评论 -
hdu 1520(简单树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520思路:dp[u][0]表示不取u的最大价值,dp[u][1]表示取u的最大价值,于是有dp[u][0]+=max(dp[v][0],dp[v][1]),dp[u][1]+=dp[v][0](其中v是u的孩子)。 1 #include 2 #include 3 #includ原创 2014-05-26 18:06:28 · 314 阅读 · 0 评论 -
poj 3140(树形dp)
题目链接:http://poj.org/problem?id=3140思路:简单树形dp题,dp[u]表示以u为根的子树的人数和。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #includ原创 2014-05-26 18:08:01 · 372 阅读 · 0 评论 -
ural 1018(树形dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662思路:典型的树形dp,处理的时候类似于分组背包,dp[i][j]代表以i为根的树取j个分支获得的最大值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 us原创 2014-05-26 18:07:59 · 455 阅读 · 0 评论 -
poj 2378(树形dp)
题目链接:http://poj.org/problem?id=2378思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define M原创 2014-05-26 18:08:13 · 323 阅读 · 0 评论 -
poj 3728(LCA + dp)
题目链接:http://poj.org/problem?id=3728思路:题目的意思是求树上a原创 2014-10-11 19:37:38 · 509 阅读 · 0 评论