zoj-3626 Treasure Hunt I (树形dp)



本文出自 http://blog.csdn.net/shuangde800



题目链接 zoj-3626


题意

给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可以获取这个价值(不能重复获得)
每一条边有一个花费值w(i,j), 表示走完i和j点的边要花费w(i,j)
现在要从k点出发,总花费值为m,问总花费不超过m的情况下并且最终要回到出发点,最多可以获取多少价值?


思路

简单树形dp。
f(i,j)表示子树i, 用花费j最多可以获得的价值
对与i的每个儿子,可以选择分配花费2*w, 2*w+1, 2*w+2,...j给它,可以看作是一组物品
对所有儿子做分组背包
f(i, j) = max{ max{ f(i, j-k) + f(v, k-2*w) | 2*w<=k<=i } | v是i的儿子节点}
ans = f(k, m);


代码

<script src="https://code.csdn.net/snippets/719.js" type="text/javascript"></script>

你可能感兴趣的:(ZOJ)