给定A和B的总和让S 我必须找到A * B的最大产品 但是A的一个条件值将在[P,Q]
的范围内如何进行呢?
如果没有范围,则任务非常简单。
使用派生方法。
如何找到例如
的最大产品A + B = 99 A的值将是[10,20]
的范围那么A和B的最大乘积是什么。
O(N)不足以解决问题
答案 0 :(得分:5)
显然,B = S - A
您需要最大化A * (S - A)
。
您从代数中了解A * (S - A)
时A = S / 2
达到最大值。
如果S / 2
属于允许范围[P Q]
,则最大值为A^2 / 4
。
否则,通过单调性,在其中一个边界达到最大值,并且是P * (S - P)
和Q * (S - Q)
中的最大值。
这是O(1)解决方案。
答案 1 :(得分:3)
这实际上是一个数学问题,与编程无关
即使您将其作为编程问题,您也应该首先以数学方式理解它。
你可以把它几何地想象为“如果我的矩形的周长固定在S,我怎样才能达到最大面积?”
答案是制作相等长度的边,并将其变成正方形。如果你受到约束,你必须尽可能接近正方形。
您可以使用微积分正式显示:
A+B = S, so B = S-A
AB therefore = A(S-A)
A is allowed to vary, so write it as x
y = x(S-x) = -x^2 + Sx
This is a quadratic, its graph Will look like an upsidedown parabola
You want the maximum, so you're looking for the top of the parabola
dy/dx = 0
-2x + S = 0
x = S/2
更好的观察方式是从我们的矩形Pq = A开始,并说P是较长的边缘。
所以现在让它变得更倾斜,通过使较长的边缘P略长并且较短的边缘q略短,两者都相同的量,因此P + q不会改变,并且我们可以显示该区域下降:
Pq = A
(P+delta) * (q-delta)
= Pq + (q-P)*delta + delta^2
= A + (q-P)delta
当delta消失为0
时,它会消失delta ^ 2 = A + (something negative)*delta
= A - something positive
即。 <甲