• 树形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. 第六题 将树切割尽可能平均的切割. 后序遍历即可

  • 相关阅读:
    Java输入输出流详解2
    Java输入输出流详解(转)
    java泛型
    E-R图学习笔记
    MongoDB工具
    MongoDB安装
    mongodb-参考其他
    mongodb学习笔记
    WebService学习笔记
    nutch笔记
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3619033.html
Copyright © 2020-2023  润新知