【问题标题】:Given sum of two numbers A and B find maximum product of A and B给定两个数字 A 和 B 的总和找到 A 和 B 的最大乘积
【发布时间】:2014-01-25 12:36:48
【问题描述】:

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

如何进行呢?

如果没有范围,那么任务就很简单了。

使用推导方法。

例如如何找到最大产品。

A+B=99 A 的值将在 [10,20] 范围内

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

O(N) 不足以解决问题

【问题讨论】:

  • 在使用 StackOverflow 之前,您应该实际尝试一下。请通过添加一些代码、一些推理或缩小问题范围来展示你的努力。在目前的形式下,看起来你要求别人做你的作业......
  • 提示:这是一个封闭的问题。含义:您可以制定一个公式,该公式将为您提供 O(1) 中的最大值。
  • 当两个值相等(Sum/2)时乘积最大,所以最大乘积为([P,Q]中A的值最接近Sum/2)*(对应乙)。编辑:在您的示例中,最大产品为 44*45(如果 A 和 B 可以采用任何值)但在给定的约束下,它将是 20*79
  • 这可能是关闭的问题,但不容易在stackoverflow上找到问题我试过没有找到任何东西然后我发布它,请详细说明方法。
  • 这个问题似乎是家庭作业。家庭作业是你的训练。在搜索 SO 或 Internet 上的其他任何地方之前,您应该努力自己解决它。

标签: math product maximize


【解决方案1】:

很明显,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) 的解决方案。

【讨论】:

    【解决方案2】:

    这实际上是一道数学题,与编程无关

    即使你是作为一个编程问题给出的,你也应该首先从数学上理解它。

    你可以在几何上把它想象成“如果我的矩形的周长固定为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^2,因为它随着 delta 缩小到 0 而消失

        = A + (something negative)*delta
        = A - something positive
    

    【讨论】:

    • 感谢@Pi,你的例子很容易理解
    猜你喜欢
    • 1970-01-01
    • 2022-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多