-
顾名思义,是通过单调队列对题目信息预处理后(得到一定的单调性)再进行动态规划。
通常,这里单调队列需要维护的单调性不再只是一个值了,可能这时单调性的判断标准除了原本的元素值之外还有元素下标亦或元素值不单一。这样之后再dp求解问题会相对变简单。
这样处理后能够一定程度上优化时间复杂度和空间复杂度。这样做某种意义上缩短原始数组长度,即进行dp时实际处理的数据量减少。还有很重要的一点,这样做可以实现降维,可能降dp的维度,也可能原始数组降维。考虑到实际题目对空间复杂度的要求并不严格,所以降维的间接目的还是降低题目处理的难度和时间复杂度。
不过这样应用单调队列处理问题有一个要求,应用单调队列维护一种单调性时会删去那些不符合单调性的元素,所以要确定这些删去的元素不会影响结果。当然反过来想,这也是应用单调队列优化的一个特点,也可以借此判断是否能够应用单调队列优化。
单调队列可以解决定长连续子区间最值问题。如果普通解法即枚举每一个定长子区间然后求相应最值,而在这里注意到了相邻两个连续区间会重复枚举多个相同数据,连续多个子区间时会有些数据枚举更多,利用单调队列优化可以减少部分枚举解决问题。利用单调队列优化,当队头队尾元素距离超出定长时弹出队首元素,而当队尾元素在维护的单调性上优先于要入队的元素时弹出队尾元素。
当然这样做也就是单调队列的应用,不过在做题时可以多换换思路考虑,单调队列的用法多种多样,它本身就是种工具,这里只是明白了它与dp问题可以结合,而具体怎么用,只能通过刷题自总结了。
单调队列优化动态规划
最新推荐文章于 2022-10-12 00:21:18 发布