【问题标题】:Find Exactly four integers from array that sum up to given N and the integers needs to maximize their end product从数组中找到恰好四个整数,总和为给定 N 并且整数需要最大化它们的最终产品
【发布时间】:2018-09-26 16:20:24
【问题描述】:

请注意,我不是在这里要求代码,但如果可能的话,我正在寻求一种方法和解释。

给定一个整数数组和整数 N,我们如何才能找到恰好四个整数,它们的总和将等于 N。有一个条件是我们应该找到四个这样的整数 A、B、C、D会最大化产品

AXBXCXD

示例 N 为 60,数组为

30,20,15,12,10,6,5,4,3,2

找到四个整数有很多可能,其中一些如下所示

可能性1

30+10+10+10=60 --> 最终 AXBXCXD=30*10*10*10=30000

可能性2

15+15+15+15=60 -->最终AXBXCXD=15*15*15*15=50625

正确答案是所有可能的 A、B、C、D 整数集及其乘积中的 50625,它必须是我们的最终输出。

另一个例子 N 是 8

数组是 2 个整数 4,2

四个整数A、B、C、D求和的可能性只有1个,具体如下。

2+2+2+2=8 最终输出 2X2X2X2= 16

如果数组没有四个整数的可能组合来求和为 N,我们实际上必须打印 -1。这就是数组没有这样可能的整数的地方。

通过查看at this question,我了解了我们可以如何递归地解决问题,以找出总和为 N 的数组子集。但我不明白我们如何从上述问题陈述中强制执行确切的四个整数条件.

【问题讨论】:

  • 这被称为“子集和”问题,在计算机科学中非常有名。关于这个确切问题的示例、教程、讲座和教科书问题有数百甚至数千个。
  • 还有,需要最大化产品。
  • “我不是在这里要求代码,但如果可能的话,我期待一种方法和精彩的解释。”听起来会更好,因为“我不是在这里要求代码,我要求的是一种方法和解释,如果可能的话”。
  • @JohnDonn 是的已编辑
  • 遗传算法不能通过选择4个随机值作为参数并在总和为60时最大化乘法来解决这个问题吗?

标签: algorithm


【解决方案1】:
  • 计算每对及其乘积的总和
  • 按总和排序
  • 对于与 X 相加的每一对,找出与 N - X 相加且积最高的一对
  • 将 2 对的乘积存储为该与前一个最大值之间的最大值
  • 完成后,显示最大产品

复杂度:O(n^2 * 2 log n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多