zoukankan      html  css  js  c++  java
  • poj 1155 TELE (树形背包dp)



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



    题目链接 poj-1155


    题意

           某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。

           从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。

        现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号。

        写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用户尽可能多。

     

    思路

    树形背包的入门题。
    f(i, j),表示子树i转播给j个用户的最大收益值
    这题可以看作是树上的分组背包,每个子树看作是一组物品,这一组物品可以取1个,2个...j个
    然后就是套用分组背包的算法了

    f(i, 1) = w(i), 当点i是叶子节点时
    f(i, j) = max{ f(i, j-k) + f[v][k] - w(i, v) | v是i的儿子节点, 0<=k<=j}


    代码

     
  • 相关阅读:
    324. Wiggle Sort II
    341. Flatten Nested List Iterator
    300. Longest Increasing Subsequence
    72. Edit Distance
    63. Unique Paths II
    221.Maximal Square
    House Robbers. 198 & 213
    [C++] 与比较有关的事情
    218.The Skyline Problem
    41. First Missing Positive
  • 原文地址:https://www.cnblogs.com/riskyer/p/3266624.html
Copyright © 2011-2022 走看看