博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 4276 The Ghost Blows Light
阅读量:7052 次
发布时间:2019-06-28

本文共 767 字,大约阅读时间需要 2 分钟。

题意

1. 给定一棵树, 树上节点有 value, 节点之间 travel 有 cost. 给定起始节点和最大 cost, 求解最大 value

思路

1. 寻找最短路径

  a. 题目描述中有两句话, "There is exactly one route between any two rooms", "Each of the next N-1 lines contains three integers" 说明给出的结构是一棵树

  b. 假如给定的时间小于起终节点间的最短路径, 那么逃跑失败. 否则, 会有多余的时间跑到其他节点拿到更多的价值

  c. 使用多余的时间获取最大价值的方法在最短路径上的每个节点上分配合理的时间, 并在每个节点上合理的遍历

2. 以最短路径上的节点为树根进行树形 DP

  a. 假设 i 表示最短路径上的某一个节点, j 表示剩余的时间. DP[i][j] 表示在 i 上分配 j 时间能够得到的最大价值

  b. DP[i][j] = max(DP[son1][t1] + DP[son2][t2]+ ...). Son 表示节点 i 的孩子节点, t表示在某个孩子节点上分配的时间, 分配一定要使价值最大化

  c. 分配的动态规划算法. DP[i][j] = max(DP[i][j], DP[sonx][j-2*costx-t])  0 <= t <(j-2*costx) 这就以动归的思想解决了 b  

3. 在最短路径上的每个节点上分配时间, 使获得的总价值最大

  a. 通过 步骤2, 获得了在任意节点 i 分配之间 j 所能获得的最大价值, 现在需要再最短路径上的节点上分配之间, 以使总价值最大

  b. 这又是一步动态规划, 思路和 2.b 一样, 动归做法和 2.c 相同

 

转载地址:http://khsol.baihongyu.com/

你可能感兴趣的文章
php中禁止单个ip与ip段访问的代码小结
查看>>
LeetCode-330.Patching Array
查看>>
zxing生成二维码转base64 img直接显示 Image对象转Base64码(java)
查看>>
xfire冲突问题解决(maven配置)
查看>>
C#面向对象(三)接口实现多态
查看>>
Linux下用Java获取本机IP
查看>>
Eclipse的Spring库导入
查看>>
velocity 判断 变量 是否不是空或empty
查看>>
【leetcode】123. Best Time to Buy and Sell Stock III
查看>>
角色设计的特点
查看>>
sublime text格式化json快捷键
查看>>
获得数据库自动生成的主键
查看>>
磁盘阵列
查看>>
y轴数据变换利器——yaxis-transformer
查看>>
Hibernate缓存机制
查看>>
从头开始复习css之动画
查看>>
sed常见用法,删除匹配行的上2行,下3行
查看>>
【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
查看>>
android 7.1 调用相机崩溃解决办法
查看>>
访问控制符
查看>>