斜率优化DP

QWQ

upd:这里是yyb的更新,今天是2019.3.18的晚上。

我觉我的这篇文章就是在扯蛋,所以到这里看斜率优化把QwQ。

题外话

考试的时候被这个玩意弄得瑟瑟发抖

大概是yybGG的Day4

小蒟蒻表示根本不会做.....

然后自己默默地搞了一下斜率优化

这里算是开始吗??

其实我讲的会非常非常非常简单,,,而且绝对没有一张图(因为我绘图水平太菜)

貌似没太多友善的题目可以用来搞....算了

虚一点,缥缈一点的来说吧....

其实我就是写给自己看的...

对于某一类DP方程形如:(当然max也可以)

\[f[i]=min(f[j]+g(i,j))
\]

其中\(g(i,j)\)

是一个只和i于j相关的函数

我们知道

转移一定是从某个位置转移过来了,其他位置的转移一定不会比这个位置好

所以,不妨设从j位置转移过来,另外一个奇怪的位置从k转一个过来

于是有:

\[f[j]+g(i,j)<f[k]+g(i,k)
\]

接下来再假设一步

我们假设\(g(i,j)=h(i)t(j)\)

其中 \(h(i)\)和\(t(j)\)是只和i与j有关的函数

那么不等式变为

\[f[j]+h(i)t(j)<f[k]+h(i)t(k)
\]

移项得

\[h(i)(t(j)-t(k))<f[k]-f[j]
\]

\[h(i)<\frac{f[k]-f[j]}{t(j)-t(k)}
\]

这个时候就看到右边的东西没有???

但是要记住,除过去可能会要变号

这玩意就可以视作一个斜率啦

但是,这个玩意有了不能够直接用嗷

只有当满足单调的时候才能够用斜率优化

当且仅当\(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简单的总结的更多相关文章

  1. 斜率优化dp 的简单入门

    不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...

  2. [BZOJ3156]防御准备(斜率优化DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP

  3. HDU 3507 Print Article(斜率优化DP)

    题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...

  4. bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 11893  Solved: 5061[Submit][S ...

  5. 2018.09.10 bzoj1597: [Usaco2008 Mar]土地购买(斜率优化dp)

    传送门 终究还是通宵了啊... 这是一道简单的斜率优化dp. 先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块. 于是剩下的土地有一条边单增,另外一条单减. 我们假设a[i]是单减的,b ...

  6. 2018.09.05 任务安排(斜率优化dp)

    描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...

  7. 斜率优化DP学习笔记

    先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...

  8. 【转】斜率优化DP和四边形不等式优化DP整理

    (自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...

  9. HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)

    题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...

随机推荐

  1. Windows下Nginx的配置及配置文件部分介绍

    一.在官网下载 nginx的Windows版本,官网下载:http://nginx.org/download/ 选择你自己想要的版本下载,解压 nginx(例如nginx-1.6.3) 包到你的win ...

  2. Halcon一日一练:CAD类型的相关操作

    大很多场合,需要在视觉程序中导入CAD文档,比如,在3C行业,需要对手机外壳进行CNC加工,或者点胶操作,此时,需要获取产品的各个点的数据.如果将CAD直接导入,就会大的减少编程工作量,同时也能达到很 ...

  3. Sublime3中如何安装markdown插件支持

    参考文章 Sublime Text下使用markdown的环境搭建和配置 MarkDown生成目录索引 按下键Ctrl+Shift+p调出命令面板,找到Package Control: install ...

  4. 《Discuz安装时候出现乱码 -- 问题解决方法》

    自我安装discuz时出现安装界面乱码的情况,跟链接所说一样,经过原作的分享,加上我自己的实验,明白了,什么时候修改/usr/local/php/etc/php.ini里面的default_chars ...

  5. 织梦去除版权中的Power by DedeCms

    找到文件 \include\dedesql.class.php 注释或删除下面代码,大概在588行 $arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77, ...

  6. tpframe框架之slide模块的使用

    最新版git:https://gitee.com/37duman/tpframe 下载插件 点击下载slide插件 安装插件 把下载下来的插件解压后放置在addon文件夹 登录后台,点击插件管理 点击 ...

  7. 怎样才能收集到所有开发人员的blog(待续…)

    第一个问题,如何找到尽可能多的博客地址? 1. 找到一个知名blog, 遍历这个博客的外链. 2. 遍历找到的外链,并以同样逻辑找到其他博客. 3. 如果遍历到的博客地址已经存在则停止遍历. 还有一种 ...

  8. 老男孩Python全栈开发(92天全)视频教程 自学笔记18

    day18课程内容: os模块 import osprint(os.getcwd())#D:\untitled\练习题 获取当前工作目录os.chdir(r'D:\untitled\练习题\16.1切 ...

  9. zoj 3962 Seven Segment Display 数位dp

    非常好的一个题,可以比赛时想到的状态太奇葩,不方便转移,就一直没能AC. 思路:dp(i, j)表示已经考虑了前i位,前i位的和为j的贡献.如果当前的选择一直是最大的选择,那么就必须从0~下一位的最大 ...

  10. 蚂蚁爬杆问题 UVA 10881

    算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...