【问题标题】:Algorithmic approach to find Maximal Product寻找最大产品的算法方法
【发布时间】:2015-11-20 22:36:21
【问题描述】:

如果给出 2 个整数,说 a 和 b。找到 b 个正整数,使得它们的和等于 a 并且它们的乘积最大。我们必须返回最大产品作为输出。

约束是 -

0

b

必须使用什么样的算法或方法来解决这个问题?

【问题讨论】:

    标签: java python c++ algorithm data-structures


    【解决方案1】:

    假设我们有两个整数 x,y 使得 x

    (x+1)*(y-1) = x*y + y - x - 1 >= x*y
    

    这就是说,我们可以通过增加 x 和减少 y 来使产品更大。

    因此,最佳答案将使所有数字彼此相差 1 个单位(否则我们可以获得更好的答案)。

    所以我们的数字都等于 x 或 x+1(对于某些 x 尚未确定)。假设我们有 k 个较大的数字,我们知道必须有 b-k 个较小的数字。我们现在可以按如下方式计算 x 和 k:

    x*(b-k)+k*(x+1) = a
    b*x - k*x + k*x + k = a
    b*x + k = a
    

    因此 x = a // b 和 k = a % b。

    最终结果将是 x**(b-k)*(x+1)**k。

    (请注意,如果 sum 等于 a 且 b > a,这个问题似乎有些奇怪,因为这对于正整数是不可能实现的。)

    【讨论】:

    • 是的,我已经按照您在最后一行中所做的注释编辑了约束,因此现在不会出现这种不可能的情况。
    • S,修改编辑后,最终的产品 x**(b-k)*(x+1)**k 会不会??? @Peter de Rivaz
    • 是的,经过修改,我希望这是正确的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多