码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1155 (树形DP+背包)

时间:2014-10-17 21:50:17      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:http   os   ar   for   strong   sp   on   问题   ef   

题目链接http://poj.org/problem?id=1155

题目大意:电视台转播节目。对于每个根,其子结点可能是用户,也可能是中转站。如果是中转站则花钱,如果是用户,则收钱。问在不亏本的前提下最多能有多少个用户看到节目。

解题思路

树形背包。cost=1。

且有个虚根0,取这个虚根也要cost,所以最后的结果是dp[0][m+1]。

本题是cost=1的特殊背包问题,在两个for循环上有一个优化。

for(f+1...j....cost)

  for(1....k...j-cost)

其中f为当前已经dfs子结点个数。之所以+1,是因为根要预留一个空间。

f+=dfs(t),dfs(t)返回的是子点t的f+1。

其实可以直接把f+1写成m+1, 不过要多跑几次循环。

这种写法在POJ 1155中对于子结点不完全取将会起到很大作用。

POJ 1155 (树形DP+背包)

标签:http   os   ar   for   strong   sp   on   问题   ef   

原文地址:http://www.cnblogs.com/neopenx/p/4032079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!