给定两个数字A和B的总和找到A和B的最大乘积

时间:2014-01-25 12:36:49

标签: math product maximize

给定A和B的总和让S 我必须找到A * B的最大产品 但是A的一个条件值将在[P,Q]

的范围内

如何进行呢?

如果没有范围,则任务非常简单。

使用派生方法。

如何找到例如

的最大产品

A + B = 99 A的值将是[10,20]

的范围

那么A和B的最大乘积是什么。

O(N)不足以解决问题

2 个答案:

答案 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

即。 <甲