andre_joy

导航

2012年10月9日

poj 1947

摘要: 地址:http://poj.org/problem?id=1947题意:给你一棵树,求最少剪掉几条边使能够得到一个p个节点的树。mark:因为节点个数不多,我们可以把节点个数当成一个状态,那么dp[i][j]代表以i为根的子树要变成j个节点需要剪掉的边数。 这里我们考虑状态转移的时候要注意,,我们考虑子节点的时候不用考虑它与父节点的那条边,就当不存在,那么最后求的的最小边数加1就ok了~ 考虑一个节点时,有两种选择,要么剪掉跟子节点相连的边,则dp[i][j] = dp[i][j]+1; 要么不剪掉,则d[i][j] = max(dp[i][j],... 阅读全文

posted @ 2012-10-09 22:41 andre_joy 阅读(613) 评论(2) 推荐(0) 编辑

poj 1155

摘要: 地址:http://poj.org/problem?id=1155题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号。mark:树状dp。由于求的是最多多少用户,那么我们可以把用户个数当成一个状态。dp[i][j]代表i节点为根节点的子树j个用户的时候最大剩余费用。 则dp[i][j] = max(dp[i][j], dp[i][k]+dp[son][j-k]-w[i][son]); 注意两点,第一点是上面式子中的dp[i][k]必须先用一个tem[MAX]数组提取出来,因为在计算的过程中会相互影响。第二... 阅读全文

posted @ 2012-10-09 22:18 andre_joy 阅读(488) 评论(6) 推荐(0) 编辑