【问题标题】:Selecting rational numbers with maximum sum选择总和最大的有理数
【发布时间】:2017-04-16 05:16:27
【问题描述】:

我有 n 个有理数。其中,我必须选择 m 个数字,这样

sum of numerators of m numbers /sum denominators of m numbers is maximum. 

例如如果我有 3 个数字 1/1、1/2、2/4,我必须选择 2 个数字。那么组合将是

If 1/1, 1/2  are used then 1+1/1+2 = 2/3
If 1/1, 2/4 are used then  1+2/1+4=3/5
If 1/2, 2/4 are used then  1+2/2+4=3/6=1/2

Maximum is 2/3

假设我有指定分子的 n 个整数数组,以及其他 n 个分母整数数组。和数字 m。 战略是什么?

输入中的数字不必是约简有理数。例如,一个数字可以是 4/6,不一定是 2/3。

编辑: 蛮力解决方案将通过从 n 中选择 m 个数字来尝试所有排列。然后应用上面的公式来找到结果,然后看看哪个组合给出了最大的结果。

所以我想知道是否有任何数学公式或属性或比蛮力方式更聪明的方式。

【问题讨论】:

  • 请发minimal reproducible example 并准确指出您遇到问题的地方。
  • @trashgod 我想写一个程序。所以我需要逻辑/数学属性。而不是蛮力。
  • 我认为这是一个相当不错的竞争性编程问题,花了我几分钟的时间思考。但它可能应该继续 cs.stackexchange.com
  • mediant
  • 我认为不允许讨论正在进行的比赛的问题:link

标签: java math sum rational-numbers


【解决方案1】:

我会试试看的。

由于我们想要最大化分子除以分母的总和,我们应该选择分子和分母之间的差异最大的那些数字。这将确保为m 数字的最小分母和选择最大的分子和,这将为我们提供所需的分数的最大值。

例如,

nums - 1/1, 1/2, 2/4
diff - 0  , -1 , -2
max is 2/3 using 1/1 and 1/2

因此,1/11/2 将给出最大值。

如果出现平局,我们可以简单地选择分子和分母数值较大的分数,因为这样会增加比率。

例如,

nums - 1/1, 1/2, 2/4, 2/3
diff - 0  , -1 , -2 , -1
max is 3/4 using 1/1 and 2/3

希望这是有道理的。

【讨论】:

  • 这看起来像逻辑。我会尝试更多的测试用例并尽快接受答案。
  • 在此测试用例中失败:1/1 , 1/5, 50/100,我们需要选择两个数字,然后您的方法将选择数字:1/1 , 1/5 给出答案2/6,但可以通过选择1/1, 50/100 获得正确答案给出答案的数字51/101
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多