zoukankan      html  css  js  c++  java
  • 树形DP

    题目

    1. Ghost Blows Light
    2. TELE
    3. Rebuidling Roads
    4. Bribing FIPA
    5. Apple Tree
    6. Contestants Division

    思路

    1. 树形 DP 动规数组的设置方法一般为 dp[u][i], u 为根节点, i 为可枚举的量(资源, 收益都有可能)

    2. 树形 DP 一般都是多叉树转二叉树, 若孩子节点之间的地位不平等, 则 dp[u][i] 需要添加额外的维

    3. 代码框架是 dfs 进行后序遍历, dfs(int pre, int u, int K)

    4. 第一题 鬼吹灯. 经典树形 DP. dp[u][i] 表示在以 u 为根的节点花费 i 的时间最后回到点 u 所能达到的最大价值.

    dp[u][i] = max(dp[u][i-k-2] + dp[j][k])

    5. 第二题 电信. dp[u][i] 表示以 u 为根的树, 保留 i 个用户所能得到的最大收益

    dp[u][i] = max(dp[u][i-k] + dp[j][k])  

    6. 第三题 修路. dp[u][i] 表示以 u 为根的树, 保留 i 个边所需要的最少切割数.

    dp[u][i] = min(dp[u][i-k], dp[j][k])

    7. 第四题 贿赂. 和上面相同, 但要注意, 有时候直接贿赂树根更加有效

    8. 第五题 吃苹果. dp[u][i][0] 表示在以 u 为根的节点上分配 i 单位时间最终回到 u 所能吃到的最多苹果数; dp[u][i][1] 表示没能回到 u 所能吃到的最多苹果数

    dp[u][i+2][0] = dp[u][i-k][0] + dp[v][k][0]

    dp[u][i+1][1] = dp[u][i-k][0] + dp[v][k][1]

    dp[u][i+2][1] = dp[u][i-k][1] + dp[v][k][0]

    9. 第六题 将树切割尽可能平均的切割. 后序遍历即可

  • 相关阅读:
    python:HTML转义
    Python 安装 MySQLdb
    C# 获取当前路径方法
    配置 vim Python IDE 开发环境
    python:HTML转义
    Python list去重
    源码探秘
    加号的作用
    多态练习
    在web service用Cache要导入System.Web.HttpRuntime
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3619033.html
Copyright © 2011-2022 走看看