贪心与DP——P1987摇钱树
题目: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摇钱树相关推荐
- 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)
题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...
- 【贪心 和 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: ...
- 2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP
文章目录 0 压缩后缀数组 1 新年礼物 2 聚会 3 辽哥游戏 立阳二中.清华医学系谢俞 0 压缩后缀数组 据传是水题 当f[i]=i时,原数组s的i位置一定是偶数,那么s[i]=a[对应的位置]* ...
- $bzoj1060-ZJOI2007$ 时态同步 贪心 树形$dp$
题面描述 小\(Q\)在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字\(1,2,3-.\)进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...
- 牛客 - 树上求和(贪心+树形dp)
题目链接:点击查看 题目大意:给出一棵树,现在要求给每条边赋上 0 ~ n - 1 的值,且不重复,规定每条路径 ( u , v ) 的权值和为其简单路径上的边权之和,而整棵树的权值和为 所有简单路径 ...
- 【LeetCode - 122】买卖股票的最佳时机 II(贪心 或 dp)
题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i 个元素是一支给定股票第 i ...
- 搜索,贪心,DP,三者的区别和联系
1. 贪心是一种特殊的动态规划,动态规划的本质是独立的子问题,而贪心则是每次可以找到最优的独立子问题. 贪心和动归不是互斥的,而是包含的,贪心更快,但约束更强,适应范围更小.动归和bfs的关系也是一样 ...
- 【贪心 和 DP + 卖股票】LeetCode 121. Best Time to Buy and Sell Stock
LeetCode 121. Best Time to Buy and Sell Stock Solution1:我的答案 动态规划和贪心不要区分的那么明显嘛~~~ class Solution { p ...
- 【贪心 和 DP】LeetCode 55. Jump Game
LeetCode 55. Jump Game 貌似一直就没做几个贪心的题,是时候好好学习一个了.. 参考网址:http://www.cnblogs.com/grandyang/p/4371526.ht ...
最新文章
- 不能成为专业软件测试人员的10大理由
- 德国虚拟主机 linux,细说Linux虚拟主机的搭建及配置
- python 爬取道客巴巴文档_Python常用的几个高效率的爬虫框架
- 【转】JNI(Java Native Interface)的简介
- 数据库如何闪回到某个时间点?
- extremeComponents(ec)源码分析
- 一元二次方程python脚本_Python实现求解一元二次方程的方法示例
- windows下github 出现Permission denied (publickey)
- 无人车火了 百度是如何做到的?
- mac xampp连接mysql数据库_请问在mac下xampp无法读取mysql的数据
- JAVA几何图注水,如何使用java绘制几何形状到图片?
- 信号量实现环形buff下多生产者多消费者模型
- 视频编码与封装方式详解
- 用于遥感图像语义分割和单视图高度估计的编码器-双解码器IGARSS2019
- 如何找到 SketchUp 插件所在的目录?
- ramda 函数 list
- REST ful风格总结(在逍遥子的基础上~只供自己简单总结,详情请看原文)
- darknet cpp weights模型转换成ONNX模型
- c语言共阴极数码管数字6,共阴数码管 显示数字 C语言程序
- [2016][34]基于大数据的牛顿(Knewton)平台自适应学习机制分析