题目:P1987 摇钱树

\(\text{蒟蒻在DP之路上求索着}\)

这道题我一开始竟然觉得是区间DP

思路

看起来这道题我们可以以任何顺序来砍树,这就牵扯到先后砍树哪一种更优.如果我们要暴力的话,那就是枚举树的全排列,然后寻找最优解.可是如果我们不枚举,有没有办法通过一些方法判断出哪一棵树先砍呢?

还记得国王游戏吗,在那一题中我们讨论了邻项交换法来寻找贪心策略.我们不妨来尝试一下.

假设一棵树上的总钱数是\(A\),每天掉落\(a\)个,另一棵树是\(B\)和\(b\).我们先按照\(A,B\)的顺序在时间\(x\)和\(x+1\)砍掉.这时我们将会得到的收益为\(A-ax+B-b(x+1)[1]\).而我们交换\(AB\),得到的收益是\(A-a(x+1)+B-bx[2]\),如果先砍\(A\)更优,那么我们要求\([1]\)式-\([2]\)式要大于0.经过整理,我们发现此时\(a-b>0\),也就是\(a>b\).现在我们可以得出结论了:先砍倒掉钱速度快的树更划算.因此我们要按照掉落速度从大到小排序.

但是我们只能砍掉K棵树,也就是说我们上文提到的\(B\)不一定能砍掉,然而我们的交换是在两棵树都能砍掉的前提下进行的,因此要有所取舍.这就是一个容量是K的01背包问题.设\(f[j]\)表示砍掉\(i\)棵树的最大值,那么我们不难得出:
\[ f[j]=max(f[j],f[j-1]+max(0,A[i]-a[i]\times (j-1)))(1\le i\le n,1\le j\le max(i,K)) \]
这样问题就解决了.因此贪心和DP有时也能有很好的结合.
当然了:

\(\textit{多测不清空,爆零两行泪}\)

转载于:https://www.cnblogs.com/i-cookie/p/11597376.html

贪心与DP——P1987摇钱树相关推荐

  1. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  2. 【贪心 和 DP + 卖股票】LeetCode 122. Best Time to Buy and Sell Stock II

    LeetCode 122. Best Time to Buy and Sell Stock II Solution1:我的答案 贪心和DP傻傻分不清! class Solution { public: ...

  3. 2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP

    文章目录 0 压缩后缀数组 1 新年礼物 2 聚会 3 辽哥游戏 立阳二中.清华医学系谢俞 0 压缩后缀数组 据传是水题 当f[i]=i时,原数组s的i位置一定是偶数,那么s[i]=a[对应的位置]* ...

  4. $bzoj1060-ZJOI2007$ 时态同步 贪心 树形$dp$

    题面描述 小\(Q\)在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字\(1,2,3-.\)进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...

  5. 牛客 - 树上求和(贪心+树形dp)

    题目链接:点击查看 题目大意:给出一棵树,现在要求给每条边赋上 0 ~ n - 1 的值,且不重复,规定每条路径 ( u , v ) 的权值和为其简单路径上的边权之和,而整棵树的权值和为 所有简单路径 ...

  6. 【LeetCode - 122】买卖股票的最佳时机 II(贪心 或 dp)

    题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i 个元素是一支给定股票第 i ...

  7. 搜索,贪心,DP,三者的区别和联系

    1. 贪心是一种特殊的动态规划,动态规划的本质是独立的子问题,而贪心则是每次可以找到最优的独立子问题. 贪心和动归不是互斥的,而是包含的,贪心更快,但约束更强,适应范围更小.动归和bfs的关系也是一样 ...

  8. 【贪心 和 DP + 卖股票】LeetCode 121. Best Time to Buy and Sell Stock

    LeetCode 121. Best Time to Buy and Sell Stock Solution1:我的答案 动态规划和贪心不要区分的那么明显嘛~~~ class Solution { p ...

  9. 【贪心 和 DP】LeetCode 55. Jump Game

    LeetCode 55. Jump Game 貌似一直就没做几个贪心的题,是时候好好学习一个了.. 参考网址:http://www.cnblogs.com/grandyang/p/4371526.ht ...

最新文章

  1. 不能成为专业软件测试人员的10大理由
  2. 德国虚拟主机 linux,细说Linux虚拟主机的搭建及配置
  3. python 爬取道客巴巴文档_Python常用的几个高效率的爬虫框架
  4. 【转】JNI(Java Native Interface)的简介
  5. 数据库如何闪回到某个时间点?
  6. extremeComponents(ec)源码分析
  7. 一元二次方程python脚本_Python实现求解一元二次方程的方法示例
  8. windows下github 出现Permission denied (publickey)
  9. 无人车火了 百度是如何做到的?
  10. mac xampp连接mysql数据库_请问在mac下xampp无法读取mysql的数据
  11. JAVA几何图注水,如何使用java绘制几何形状到图片?
  12. 信号量实现环形buff下多生产者多消费者模型
  13. 视频编码与封装方式详解
  14. 用于遥感图像语义分割和单视图高度估计的编码器-双解码器IGARSS2019
  15. 如何找到 SketchUp 插件所在的目录?
  16. ramda 函数 list
  17. REST ful风格总结(在逍遥子的基础上~只供自己简单总结,详情请看原文)
  18. darknet cpp weights模型转换成ONNX模型
  19. c语言共阴极数码管数字6,共阴数码管 显示数字 C语言程序
  20. [2016][34]基于大数据的牛顿(Knewton)平台自适应学习机制分析

热门文章

  1. 大地震后成都将安全两百年
  2. JAVA 取出Map元素值 的三种方法
  3. 读书笔记-沟通的方法
  4. 用VScode 插件做代码同步演示,原来实时信令控制还能这么玩
  5. 鸿蒙华为nova3i,华为nova3i GPU Turbo领衔:专为手游优化的智能手机推荐
  6. 使用c语言实现一个简单的易语言
  7. pythonpil安装教程_python的pil库如何安装
  8. atlas大图拆分,Atlas图集拆分工具
  9. UE5ControlRig脚部IK匹配地面(FootIK)的简易实现
  10. 开始写一个新的专栏《麒麟子Cocos Creator 3D研究笔记》