给你n个墙壁的高度,你可以花a块钱让墙壁高度减一,也可以花r块钱让墙壁高度减一,还可以花m块钱让高的墙壁转移一个高度给矮的墙壁,问你让墙壁的高度全都相等所花费的最小代价为多少.
看到题目就知道是我不会写的题目.
(其实之前是听过三分的,但是没有去学过.
刚好补题的时候去学一下三分.
三分其实和二分很相似,都是将一块区间分隔开来,二分是分成两份,三分是分成三份,通过一步步排除区间来缩小时间复杂度.
但是二分适用于单调函数,三分适用于二次函数,可以用来求出二次函数的最值.
对于三分来说,凹函数和凸函数的情况是不一样的.
那对于这个题目来说,我们可以用三分来搜索某一个高度来使其他的墙等于这个高度的代价最小,很显然,这个关于h的函数是一个凹函数.
在计算花费时,我们可以先算出添加的数量和减少的数量,如果$m<a+r$,那么肯定优先选择m,然后剩下的乘以a或者r.