摘要: http://poj.org/problem?id=2486应该是做的第二道树形DP+背包问题题意:有颗苹果树n个节点,n-1条边,每个节点上有一定数量的苹果,每经过一条边花费一个单位时间,一共给了T个单位时间一棵树,从一个节点到另一个节点,如果不是父子关系的话,就要先返回父节点,再到另一个节点;总共给了T个单位时间,最后不一定再哪个节点,所以还有访问完子节点是否返回根节点的问题,为了表示是否返回,定义状态dp[i][j][0]表示不返回,dp[i][j][1]表示返回。这题就应该是这两点不好想吧。考虑好这两点,其它的就是考虑好转移过程了,理解好背包问题,不算难。代码://注意的是加边的时候, 阅读全文
posted @ 2012-10-20 17:14 快乐. 阅读(265) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1155题意:有n个点构成一棵树,节点1是广播站,2~n-m 是中转站,n-m+1~n是用户,从广播站传递信息,每经过一条边都有花费,不同的用户收听广播会支付不同的费用,问广播站在不亏本的情况下,最多有多少用户可以收听到广播解析:dp[i][j]表示i为根节点下j个用户收听的盈利(可以为负值)状态转移方程dp[u][i]=max(dp[u][i],dp[u][i-j]+dp[v][j]-edge[e].w);有题解说是01背包,但是我觉得从子节点到父节点转移就是分组背包,也是按分组背包处理的代码:#include<iostream> 阅读全文
posted @ 2012-10-20 16:57 快乐. 阅读(159) 评论(0) 推荐(0) 编辑