`
king_tt
  • 浏览: 2107500 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

poj 2486 Apple Tree (树形背包dp)

 
阅读更多


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



题目链接 poj-2486


题意

给一个n个节点的树,节点编号为1~n, 根节点为1, 每个节点有一个权值。
从根节点出发,走不超过k步,问最多可以获取多少权值?


思路

因为和uva-1407 caves有点相似,所以没想很久就AC了,但因为初始化问题WA了两次
f(i, j, 0): 表示子树i,走j次,最终不用回到i点获取的最大总权值
f(i, j, 1): 表示子树i,走j次,最终一定要回到i点获取的最大总权值

f(i, j, 1) = min{ min{ f(i, j-k, 1) + f(v, k-2, 1) | 2<=k<j } | v是i的儿子节点}

if(j==1)
f(i, j, 0) = min{ min{f(i,j-k,1)+f(v,k,0) | 1<=k<=j } | v是i的儿子节点 }
else
f(i, j, 0) = min{ min{ min{f(i,j-k,1)+f(v,k-1,0), f(i,j-k,0)+f(v,k-2,1)} | 1<=k<=j } | v是i的儿子节点 }

状态转移可能有点复杂, 还是看代码更好理解。


代码

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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics