前言

单调队列优化\(DP\)应该还算是比较简单容易理解的吧,像它的升级版斜率优化\(DP\)就显得复杂了许多。

基本式子

单调队列优化\(DP\)的一般式子其实也非常简单:

\[f_i=max_{j=max(i-t,1)}^{i-1}(s(i)+g(j))\]

其中\(t\)是一个常数,\(s(i)\)是一个只与\(i\)有关的函数,\(g(j)\)是一个只与\(j\)有关的函数,式子中的\(max\)其实也可以替换成\(min\),但这里以\(max\)为例。

由于\(s(i)\)只与\(i\)有关,因此,在\(i\)不变的时候,\(s(i)\)可以看作是一个常数,因此可以将其提出,得到下面这个式子:

\[f_i=s(i)+max_{j=max(i-t,1)}^{i-1}g(j)\]

我们可以考虑用一个队列来存储合法区间,每次将区间头弹出,然后将当前元素插入队列尾。

不难发现,在队列中,如果找到两个位置\(x,y\)满足\(x<y\),则显然\(x\)将先从队列中被弹出。

那么,如果\(g(x)\le g(y)\),则不难发现,无论如何,\(x\)都不可能对后面的元素再造成贡献了,于是就可以直接将\(x\)弹出。

这样操作之后,由于队列里的元素是按编号递增的,因此元素值肯定是单调递减的。

这样一个满足单调性的队列,就是单调队列

状态转移

单调队列优化\(DP\)的状态转移其实非常简单。

通过上面的分析,显然,队列中队头的元素一定是最大/最小的,所以转移如下:

\[f_i=s(i)+g(q_H)\]

几道例题

下面是几道例题:

第一道例题: 【BZOJ2442】[USACO2011 Open] 修剪草坪

这题还是比较板子的。

第二道例题: 【洛谷3084】[USACO2013 Open] 照片

同样是一道比较简单的板子题。

第三道例题: 【BZOJ1855】[SCOI2010] 股票交易

这题就比较复杂了,需要分多种情况讨论,依然可以用单调队列来进行优化。

动态规划专题(四)——单调队列优化DP的更多相关文章

  1. [小明打联盟][斜率/单调队列 优化dp][背包]

    链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...

  2. BZOJ 1499 [NOI2005] 瑰丽华尔兹 | 单调队列优化DP

    BZOJ 1499 瑰丽华尔兹 | 单调队列优化DP 题意 有一块\(n \times m\)的矩形地面,上面有一些障碍(用'#'表示),其余的是空地(用'.'表示).每时每刻,地面都会向某个方向倾斜 ...

  3. 单调队列优化dp

    洛谷p3800(单调队列优化DP) 题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道 ...

  4. 「学习笔记」单调队列优化dp

    目录 算法 例题 最大子段和 题意 思路 代码 修剪草坪 题意 思路 代码 瑰丽华尔兹 题意 思路 代码 股票交易 题意 思路 代码 算法 使用单调队列优化dp 废话 对与一些dp的转移方程,我们可以 ...

  5. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  6. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  7. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

  8. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  9. BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP

    BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在 ...

随机推荐

  1. mui 上拉加载更多的使用

    最近工作之余在用mui的框架开发,对mui了解了一些.在真正的app开发项目中,mui上拉加载模块中有两个坑,现在说一下. 1.在函数自己上拉加载行为后的回调函数 该函数是必须要写的,用来写自己的逻辑 ...

  2. MySQL常用配置和性能压力测试:MySQL系列之十五

    一.MySQL常用配置 以下所有配置参数以32G内存的服务器为基 1.打开独立的表空间 innodb_file_per_table = 1 2.MySQL服务所允许的同时会话数的上限,默认为151,经 ...

  3. PHP下载远程图片的几种方法总结

    1. 使用file_get_contents function dlfile($file_url, $save_to) { $content = file_get_contents($file_url ...

  4. OpenCV3的配置(VS2015)

    1:首先下载和解压到给定的目录 2:设置环境变量...\build\x64\vc14\bin 3:打开VS,新建一个项目,再添加一个代码,刚开始当然是报错的 #include<opencv2\o ...

  5. git commit之后撤销

    先git log 查看日志,找到需要回退的那次commit的哈希值 然后git reset --soft commit_id ok

  6. Unity [RequireComponent(typeof(组件名))]

  7. (转)/etc/sysctl.conf 调优 & 优化Linux内核参数

    /etc/sysctl.conf 调优 & 优化Linux内核参数 from: http://apps.hi.baidu.com/share/detail/15652067 http://ke ...

  8. MapReduce的输入格式

    1. InputFormat接口 InputFormat接口包含了两个抽象方法:getSplits()和creatRecordReader().InputFormat决定了Hadoop如何对文件进行分 ...

  9. Nginx支持PHP的CI框架

    1.找到CI库的配置文件修改 $config['base_url']    = 'http://test.example.com'; $config['uri_protocol'] = 'PATH_I ...

  10. iis mvc html

    iis mvc项目显示view文件夹下的html <system.webServer><handlers> <add name="JavaScriptHandl ...