蒟蒻关于斜率优化DP简单的总结
斜率优化DP
QWQ
upd:这里是yyb的更新,今天是2019.3.18的晚上。
我觉我的这篇文章就是在扯蛋,所以到这里看斜率优化把QwQ。
题外话
考试的时候被这个玩意弄得瑟瑟发抖
大概是yybGG的Day4
小蒟蒻表示根本不会做.....
然后自己默默地搞了一下斜率优化
这里算是开始吗??
其实我讲的会非常非常非常简单,,,而且绝对没有一张图(因为我绘图水平太菜)
貌似没太多友善的题目可以用来搞....算了
虚一点,缥缈一点的来说吧....
其实我就是写给自己看的...
对于某一类DP方程形如:(当然max也可以)
\]
其中\(g(i,j)\)
是一个只和i于j相关的函数
我们知道
转移一定是从某个位置转移过来了,其他位置的转移一定不会比这个位置好
所以,不妨设从j位置转移过来,另外一个奇怪的位置从k转一个过来
于是有:
\]
接下来再假设一步
我们假设\(g(i,j)=h(i)t(j)\)
其中 \(h(i)\)和\(t(j)\)是只和i与j有关的函数
那么不等式变为
\]
移项得
\]
\]
这个时候就看到右边的东西没有???
但是要记住,除过去可能会要变号
这玩意就可以视作一个斜率啦
但是,这个玩意有了不能够直接用嗷
只有当满足单调的时候才能够用斜率优化
当且仅当\(h(i)、f[i]、t(i)\)
都要满足单调的时候才能够用(根据取max或min,符号等单调性有所不同)
这个时候,利用单调队列维护一个凸包就可以啦
具体的类似代码如下:
for(int i=1;i<=n;++i)
{
while(head<tail&&count(Q[head],Q[head+1])<=h[i])Head++;
int get=Q[head];
f[i]=f[get]+Calc(i,get);
while(head<tail&&count(Q[tail-1],Q[tail])>=count(Q[tail],i))tail--;
Q[++tail]=i;
}
这是一份比较伪的代码
第一个while循环,目的是弹出队列头位置的不合法的状态(因为\(h(i)\)的值在变化)
中间的两句话是转移,可以直接利用斜率优化\(O(1)\)转移
后面那个while循环目的是维护单调性,当前的节点如果放进来会破坏队尾的单调性,所以要进行调整
最后一个是加入队尾,继续进行操作
这样子的话就可以维护斜率进行斜率优化啦
接下来是几道题目
有待补充
【BZOJ1010】【HNOI2008】玩具装箱
【BZOJ1911】【APIO2010】特别行动队
【Luogu2900】土地征用
【BZOJ1096】【ZJOI2007】仓库建设
蒟蒻关于斜率优化DP简单的总结的更多相关文章
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
- [BZOJ3156]防御准备(斜率优化DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP
- HDU 3507 Print Article(斜率优化DP)
题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- 2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)
传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ...
- 2018.09.05 任务安排(斜率优化dp)
描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...
- 斜率优化DP学习笔记
先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...
- 【转】斜率优化DP和四边形不等式优化DP整理
(自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...
- HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)
题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...
随机推荐
- TensorFlow实战之实现自编码器过程
关于本文说明,已同步本人另外一个博客地址位于http://blog.csdn.net/qq_37608890,详见http://blog.csdn.net/qq_37608890/article/de ...
- linux 内核参数优化
Sysctl命令及linux内核参数调整 一.Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现. ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压DP】题解+AC代码
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- docker容器安装及使用技巧
关于docker前言 A)首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式.有如下几种虚拟化的方式: 1.完全虚拟化:对底层硬件实现完全的虚拟.例如:Vmware Workstation ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记19
day19 课程内容: 第19天的课程就是复习一些正则表达式,以及说一下计算器的思路,我就把我做的计算器代码当这一天的内容吧. 计算器作业:不eval函数,计算能计算:'1-2*((60-30-8*( ...
- python资源推荐
一.文档教程 1. 廖雪峰python教程 廖老师的教程我相信不用说了吧,每个学习python的人或多或少都听说过他,对我的帮助很大. 2.python中文学习大本营 名字叫做python中文学习大本 ...
- PAT1118. Birds in Forest (并查集)
思路:并查集一套带走. AC代码 #include <stdio.h> #include <string.h> #include <algorithm> using ...
- UVA1213
先打表,再回溯+剪枝 AC代码: #include<cstdio> #include<cstring> #include<cmath> const int maxn ...
- 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...
- cache缓存的BUG
坑: 1.在使用这个模版代码开发的时候,当我们改变了数据库表的设置的时候,我们都要把本地的cache缓存文件删除一下. 如果不删除的话,当我们改变数据库设置的之后,程序读取数据是从本地的缓存文件里面读 ...