我试图解决SPOJ中的 KOPC12A 问题。
问题链接:http://www.spoj.com/problems/KOPC12A/
问题简述:
给定n个建筑物,每个不同高度(砖块数量),用 每个建筑物都有添加或移除砖块的成本,找到 使所有建筑物具有相同高度的最低成本。
尝试解决这个问题后,虽然徒劳无功,但在根据高度对输入进行排序后,我遇到了一个使用三元搜索的解决方案。
我无法理解均衡建筑物高度的成本如何变为单峰(因为三元搜索只能应用于单峰函数)
这让我很难过,而且我无法继续前进。
对此的任何见解都非常感谢。
谢谢 -
答案 0 :(得分:1)
要扩展sasha的评论,我们可以将函数f
的(强)单峰型定义为条件
for all x < y < z, f(y) < max(f(x), f(z))
和函数f
的(强)凸性作为条件
z - y y - x
for all x < y < z, f(y) < ----- f(x) + ----- f(z).
z - x z - x
让建筑物的高度为h1, ..., hn
,单位更改费用为c1, ..., cn
。使所有建筑物高度为f(h')
的费用h'
为
sum i in {1, ..., n} of ci |h' - hi|.
现在这里有一系列命题,每个命题都有一个相当简单的证明,通过归纳导致f
是单峰的结论。
g
凸起的函数g(x) = |x|
。h
,对于所有凸函数g1
,函数g2
其中g2(x) = g1(x - h)
是凸的。c > 0
,对于所有凸函数g1
,函数g2
其中g2(x) = c g1(x)
是凸的。g1
和g2
,函数g3
g3(x) = g1(x) + g2(x)
是凸的。