每天一个TopCoder算法题(16.08.08)

这个题目来自TopCoder SRM536 250分的题目

原题

srm536_250.png

题意

有一些公司,每个公司都有一个权值,多个公司可以合并成一个公司,合并后的权值为(r0 + r1 + r2 .. + rn) / n。例如,一个3, 4, 5 的公司合并后的结果是4, 一个-2, -7的公司合并的结果是-4.5。现在问题是问这些公司经过多次合并,最后的公司的权值最大是多少,例如3,4,5可以先3,4合并,变成3.5再3.5跟5合并,变成4.25.

思考

这个题目,我们很容易就能想到,最大的公司一定要最后合并,然后是次大的公司,然后。。于是我们需要从小到大排序。然后我们来看看2合并做两次合并大还是3个一块合并大。我们假设a<b<c,很容易证明

公式.png

所以这个题目的解法就是将权值从小到大排序,然后开始合并。(1,2)合并结果跟3,((1,2),3)合并结果再跟4。。
我的天,我们竟然靠蒙的方法把这个题目给蒙对了。。。
当然,我们最科学的解法并不是这样的。
我们假设公司A是由a0,a1..ap合并而成,A的价值为x, 公司B是由b0,b1,bq合并而成,价值为y。假设a0是里面最大的一个公司,那么,如果A剔除a0,最后再和a0进行合并,如果结果更大,那么满足如下公式:

x + y <= a0 + (px + qy - a0) / (p + q - 1) 

等价于

(x + y) ((p + q - 1) / (p + q - 1)) <= (px + qy) / (p + q - 1) + a0((p + q - 2) / (p + q - 1)) 

化简可得

x(q - 1) + y(p - 1) <= a0(p - 1) + a0(q - 1)

因为a0 > x 且 a0 > y,所以条件成立。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容