最大靠墙矩形 题解 (单调性)
用s表示所有木条的总长度,用w表示墙的对边的长度。根据均值不等式,在w∈[0,s]的范围内,面积w(s-w)/2是关于 w 的单峰函数,且最值在 w = s时取得
这个题比较难。
两个极为重要的性质:
不论如何锯木头,矩形总有一条边是原木棍拼成的。
对于总长度为n的一堆木棍,使用一次锯木头的机会的条件下总可以把它变为两根任意 长的木棍,且两根木棍的总长度为n。
那么问题就迎刃而解了,用原木棍拼成的那个木棍组成的那一条边是墙的对边或者邻边:
对于对边:
我们知道面积是一个关于对边的二次函数,设木棍总长度为n,我们只需要对边的长度 最接近n/2即可(二次函数),剩余的其它木棍可以组成另外两条相同的边。
至于如何找到这个最接近n/2的长度,木棍才40根,当然是搜索了。
不过直接搜索显然会超时(40!),所以我们把原木棍分为两堆分别搜索出它们可能拼 接成的所有长度并用数组存下来。
将第一堆的可能结果从小到大排序,第二堆的可能结果从大到小排序。然后可以利用其 单调性用走指针的方式(大了就第二堆指针加,小了就第一堆指针加)就可以求出最接 近n/2的长度是多少。
对于邻边
和对边一样的方法。
最难的地方:
double大概只能精确存储2^50左右大小的数字,当其太大的时候,精度会有损失。
本题的答案太大导致不能用double直接输出,显然答案的小数要么是.0要么是.5,需要把答案转为long long通过特判的方式输出小数点。
本文来自博客园,作者:lei_yu,转载请注明原文链接:https://www.cnblogs.com/lytql/p/15003909.html