决策单调性优化,玄学 “for me“

声明:借鉴了:https://blog.csdn.net/qq_35950004/article/details/83791252, 大神博客

例子:
ans[i] = max(a[j] + sqrt(i - j)) (j < i)
大致意思:i位置的答案等于从i前面选一个j位置,使得表达式最大。
那么,当咱们已经求出 i 的最大值就是在 j 位置的时候,求比 i 大的位置的答案的时候它的范围应该是怎样的呢?
假设 a[j] + sqrt(i - j) < a[k] + sqrt(i - k) (j < k) (意思是,已知j的i答案往前找的最大值的位置,从j的后面选一个k,满足这个式子的)
解释一下这个式子: y = sqrt(x) 这是一个递增函数,但是它的增量后随着x的增大而减小,(用物理的语言就是,加速度减小的加速运动),这个式子很重要。
j < k =>> -j > -k =>> i - j > i - k 因此假设的前面的x是大于后面的x的----------!!!!
当i增大的时候,也就是对应的x增大的时候,前面增加量会小于后面的增加量,所以假设是一定成立的。
那么: 当咱们求比 i 大的ans的时候, 咱们只需看j 后面的就可以了(此时把j前面的全部不用看了),这样复杂度降低了very多。

---------------------------------------这仅仅是非常非常eazy的东东 orz orz orz
路漫漫 。。。 路漫漫 。。。

猜你喜欢

转载自blog.csdn.net/YingShen_xyz/article/details/113858921
me