斜率
适用范围
对于某些2D\nD的dp,状态为dp[i][j]表示在i的时候选了j个东西的最优解,要求dp[n][m]。
分析
如果设F(m)=dp[n][m],如果F(m)是一个单峰函数(特别的,单调函数),那么我们设Cf(m)=F(m) - F(m-1) ,则Cf(m)是一个单调不降(不升)的函数,这个时候,我们从差分是离散的积分的观点来看,那么G(x)=F(x) - kx,当k=Cf(m)的时候,G(x)的最值在m处取到。
由于Cf单调,所以k也有单调性。基于此,我们可以得到一种做法:假若二分这个k,然后计算G(x)在什么地方取到最大值,然后就可以知道k应当向什么方向移动。
下面的问题是如何计算G(x)的最大值在什么时候取到。考虑横坐标的意义,是选取多少个数,那么 -kx 表示的是每选择一个,就要多付出k的代价。这样子就有了一个新的dp,dp’[n]表示在如上条件中取到的最优值以及此时选的个数。那么假如要多选一个数,就在之前的代价上多加一个k。这样子,就成功将一个m优化成了log。
细节
还要注意,由于斜率是单调不降的,所以可能有斜率相同的一部分,这个我们就钦定在答案最优的前提下尽量少选或多选数,这样可以得到斜率相同的一段的起点或者终点,然后就行了。
文章最后发布于: 2018-12-06 20:58:25
相关阅读
一、什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到
二分图匹配,自然要先从定义入手,那么二分图是什么呢? 二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如
二分法定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直
简介 二分法插入排序没有排序,只有查找。所以当找到要插入的位置时。移动必须从最后一个记录开始,向后移动一位,再移动倒数第2位,直
常见的搜索方法:顺序查找、二分法查找、二叉树查找、哈希查找。 二分法查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均