码迷,mamicode.com
首页 > 其他好文 > 详细

2020.8.16——复习提高组知识点的第八天动态规划2

时间:2020-08-18 13:56:29      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:www   更新   复杂   lan   凸包   题解   get   单调队列   第八天   

斜率优化:

每次把i*j的项作为k,i的项和常数项作为b,j的项作为y,要是i的项最小,也就是截距最小,就是y=kx第一次接触到函数时,于是可以用单调队列维护一个凸包(以下都讲下凸包)。结合图可知i的最优决策为第一个斜率>k的点。

step1:当head~head+1的斜率<k时,head++;

step2:更新f[i];

step3:当tl-1~tl的斜率>=tl~i的斜率时,tl--;

step4:把i加入队列。

注意:O(n)的斜率优化需要满足斜率单调性,当题目不满足斜率单调性时可二分第一个斜率>k的点,时间复杂度变为O(nlogn);

P5785 [SDOI2012]任务安排

题解:暴力的解法是O(n^3),但是可以将s的费用提前计算,将复杂度降到O(n^2),但仍然过不掉,考虑优化,发现不满足斜率单调性,于是使用二分的斜率优化即可。

2020.8.16——复习提高组知识点的第八天动态规划2

标签:www   更新   复杂   lan   凸包   题解   get   单调队列   第八天   

原文地址:https://www.cnblogs.com/oierqingmo/p/13511914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!