斜率/单调优化dp
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
HDU 2829 Lawrence(四边形优化dp/斜率优化dp)
比较典型的问题,把n个节点分成m块,使得最后价值最小。 根据题意,很容易得出dp方程:dp[i][j]=dp[i-1][k]+sigma(sigma(a[l]*a[p]))(k<l<p<=j),两个sigma分别对l和p求和,其中dp[i][j]表示前j个点,分成i段的最小价值。转换一下式子,引入两个新数组可得:dp[i][j]=d[i-1][k]+c[j]-c[k]-s[k]*(s[j]-s[k]),其中c[i]表示a中从1~i任意两个数乘积的和,s[i]表示a的前缀和。我们发现,分别枚举原创 2017-07-25 09:40:39 · 464 阅读 · 0 评论 -
牛客练习赛40 D 小A与最大子段和(斜率优化dp + 二分)
中文题。原本的最大连续子串和就是一个dp的问题,所以这里也很容易往dp方向去想。与经典问题类似,我们同样令dp[i]表示以i为结尾的连续子串的最大和。由于这里的和的定义有不同,所以我们这里只用一维去表示貌似不是很够,因为如果从前面继承过来,至少需要知道起点是多少,这样才能把当前这个数字加到和里面。但是实际上,我们可以换一种思考方式。我们把每一个dp的数值单独来求,我们发现对...原创 2019-02-17 22:18:16 · 423 阅读 · 2 评论 -
HDU 5470 Typewriter(后缀自动机 + 单调队列优化dp)
大致题意:给你一串字符以及单独打印每一个字母的代价,对于一个字母,你可以选择直接打印,也可以选择利用复制粘贴的方法来完成。对于复制粘贴,每次选择长度为i的字符串的代价是i*A,复制的代价是B,粘贴的代价也是B。即复制并粘贴一个长度为x的字符串的代价是x*A+2*B。现在问把这一整个字符串打印出来的代价是多少。这道题目在今年三月的时候就开始做了,但是当时一直WrongAnswer没有找到原因,然后最近复习字符串重新做了一下,才终于过了。首先,我们考虑暴力的做法。我令dp[i]表示打印到第i个字符的最小代价,那原创 2018-08-17 16:37:23 · 542 阅读 · 2 评论 -
CodeForce 958C3 Encryption (hard)(dp+树状数组)
大致题意,给你n个数字,然后让你把这n个数字分成连续的k组,然后每一组的权值是每组所有数字的和模p。现在问所有组的权值和的极值。 首先,我们说一下这道题目的前两个版本的解法。C1是求最大值,k固定等于2,这个随便怎么暴力都行。 C2也是求最大值,然后n、k、p的范围分别是2*10^4、50和100。我们可以考虑简单的dp。令dp[i][j]表示前i个数字分成j组的最大值。有转移方程:dp[i][j]=max(dp[k][j-1]+(s[i]-s[k])%p)。可以看到这个dp的时原创 2018-04-20 23:37:08 · 374 阅读 · 0 评论 -
计蒜客 2018 ICPC宁夏 Trouble of Tyrant(单调队列+离线处理+最短路)
大致题意:给你一个包含2n-3条边和n个点的图,具体图的形状在下图中给出。告诉你每条边的长度,让你回答q个询问。每个询问包含一个数字di,意思是如果把所有边的长度都增加di,从1到n的所有路径中最短的路径长度是多少。 注意到,每次路径长度增加,对于经过路条数多的路径来说,增量更大。因此当增加很多的时候,选择经过路条数少的路径会更优。又观察到,这个图中,总共从1到n总共有n-1条路,对应经过路条数恰好也是1~n-1。因此,对于不同路条数的路原创 2018-04-23 21:55:17 · 362 阅读 · 0 评论 -
CodeForces 939F Cutlet(dp+单调队列优化)
好久没有见过这种单调dp,差点连单调队列都不会了…… 大致题意,给以一块做鸡扒或者牛扒的肉,然后告诉这块肉要两面都煎恰好n分钟才能够熟,并且生的或者焦的都不行。但是我只能在特定的时间区间内把肉翻面。现在问是否能够吃到肉,如果可以并求出最少需要翻几次面。 首先,本题状态的表示就已经是一个难点了。这个怎么想到的,其实我也不知道。dp[i][j]表示总共用时i分钟,当前不在煎的面煎了j分钟的最小翻面次数。对于朴素的dp,我们很容易想到dp[i][j]=min(dp[i-1][i-j]+原创 2018-03-16 00:32:34 · 498 阅读 · 0 评论 -
BZOJ 1492 货币兑换Cash(CDQ分治+斜率优化dp)
之前已经用斜率优化dp+平衡树维护凸点把这题给解决了,但是呢,这题的故事并没有结束。 首先膜拜CDQ陈丹琦大神Orz……昨天突然得知,其父亲是NUDT数学系的教授……与大神之间的距离居然如此之近。还是上论文:从《Cash》谈一类分治算法的应用 显然,用平衡树维护凸点的做法是可以的,但是在比赛中splay却是非常的不好写,编程复杂度极其的高。...原创 2017-12-01 21:40:45 · 647 阅读 · 0 评论 -
BZOJ 1492 [NOI2007]货币兑换Cash(斜率优化dp+splay维护凸壳)
中文题,我就不复述题意了…… 首先,由于这个买入和卖出并没有中间商赚取差价(吐槽一下),所以说每一天结束之后的价值既可以用钱来表示也可以用金券来表示。那么这样的话,我们用f[i]表示第i天的时候最多能够得到的钱,x[j]表示第j天的时候把钱换为最多的A的数量,y[j]表示对应的b的数量。那么有转移方程f[i]=max(f[i-1],x[j]*A[i]+y[j]*B[i]),直接枚举复杂度为O(N^2)。显然对于最大可达10^5的数据来说是不够的。 于是我们很容易去想到斜率优化原创 2017-10-03 23:09:40 · 453 阅读 · 0 评论 -
斜率优化dp初探
可以说,dp是一个庞大的世界,这个从我刚接触dp的时候,我的老师就是这么告诫我的。事实也正是如此,dp模型变化多端,各种优化也是层出不穷。 斜率优化就是dp的一种优化,它基于数形结合的原理,把dp问题利用图像中的斜率进行加速,配合使用单调队列,可以把时间复杂度从O(N^2)降到O(N)。 这种优化方法也是非常常用的一种方法,在比赛中也比较常见。希望能够好好掌握……原创 2017-04-05 13:12:45 · 993 阅读 · 3 评论 -
斜率优化dp再探 (模板) BZOJ 3156 & BZOJ 4518
好久没写模板了,心情小激动…… 斜率优化dp的话,到目前为止也已经做了好几道题了,除了一开始的第一道题,其他的所有题目基本上是自己一步一步推出来的, o(*≧▽≦)ツ…… 好了不得瑟了,回归正题。如上次所说的,斜率优化dp就是先写出dp方程,然后经过一些列的变化,变成斜率的表达式,然后维护单调队列优化即可。那么,我们多看几个题巩固一下吧。 别忘了此篇文章有模板哦~原创 2017-04-06 20:05:19 · 439 阅读 · 0 评论 -
NUDT银河之光校赛 G (dp+单调优化)
LargestGiven an array which consists of non-negative integers and an integerm,you can split the array into m non-empty continuous subarrays. Write analgorithm to minimize the largest sum among the原创 2017-05-01 20:21:30 · 415 阅读 · 0 评论 -
CodeForces 808E Selling Souvenirs(三分法/单调优化dp)
本文的主角并不是这个dp,这个dp只能说算称之为背包dp的一种。接下来重点讲一下三分法。首先,还是利用它只有三种质量的物品这个性质,同样可以枚举取每种质量物品的个数。最暴力的想法莫过于枚举质量为3和2的物品个数,但是O(n^2)的复杂度不可接受。于是我们就想,我枚举质量为3的物品个数,然后二分质量为2的物品个数可以吗?我们知道,用二分的前提条件是要有单调性,但是,这种情况下并没有,因为当质量为2的物品个数多了,相应的质量为1的物品个数就少了。然而,经过分析,我们发现这个函数很像一个二次函数,即有一个顶点,而原创 2017-05-17 19:40:42 · 720 阅读 · 0 评论 -
CodeForces 311B/CSU 1963 Cats Transport/Feed The Rabbit(斜率优化dp)
突然冒出来一道斜率优化的题,我都快忘了……赶紧翻原来写的博客…… 题意也不是很好理解……有n座山,m只猫,每只猫都在固定一座山上,每座山线性排列,告诉你山之间的距离,猫i在某个时刻ti出现,然后总共有p个饲养员,他们从第一座山出发,单位时间走单位距离,而且都是一只往前走不停,每次路过可以把出现的猫领走,然后饲养员出发时间可以不同。问如何安排才能够使得所有猫的总等待时间最少,输出这个时间。不管你有没有题意了,没懂自己再去看题……原创 2017-07-23 09:56:14 · 758 阅读 · 2 评论 -
2019HDU多校赛 第七场 HDU 6652 Getting Your Money Back(区间dp + 单调优化)
大致题意:告诉你你的存款余额在一个区间内,然后每次你可以猜一个数字,如果余额大于等于你猜的数字,那么你可以取走这些钱并且代价为a,否则为代不能取走且价为b。你可以多次重复这个动作,直到你能够确定你初始时的总共有多少钱。现在问你,最少花费多少的代价能够知道你初始时的账户余额。这题有点像二分的意思,如果a和b相等,那么显然按照二分的策略即是最优。考虑到这一点,我们显然可以发现,...原创 2019-08-13 11:17:40 · 725 阅读 · 0 评论