给定两个整数数组B和A,我们如何重新排列它们的元素,使得所有i的ΠA[i] B [i] 最大化?
答案 0 :(得分:3)
假设非负面,看起来你应该按增加或减少(但相同)顺序对它们进行排序。
由于一切都成倍增加,你最终会得到A [0] * A [0] * ...... * A [0] * A [1] * .. * A [1] * ......等
A [0]的B [0]和A [1]的B [1]的数量,因此,如果假设A [0]是最大的数字,那么你想要它们中的大多数,所以你应该在B [0]中得到最大值B,然后你想要在B [1]等中排在第二位。
如果你可以在A中有负数而不是B,那么这仍然会给你最大的绝对值但是这个符号可能是负的。
答案 1 :(得分:2)
如果数组包含非负数,则只需按降序对A和B进行排序。要看到这给出了最大乘积,请考虑一旦A和B按此顺序排序,您可以尝试交换两个A项,例如A [i]和A [j] s.t.一世
B[j] B[i]
A[i] A[j]
------------------
B[i] B[j]
A[i] A[j]
即。 A [i] B [j] -B [i] A [j] B [i] -B [j] ,等于(A [i] / A [j])(B [j] -B [i])其中指数为零或负,因为B [i]≥B[j]。假设A [i]≥A[j]所以A [i] / A [j]≥1。因此,当指数为0或负时,比率为1或更小。这表明新产品的价值低于旧产品。注意:这只是一个例子,而不是形式证明,因为它只考虑交换两个元素。
答案 2 :(得分:2)
假设数组有正整数,
如果您记录产品的日志:
变为Sum B[i]* log A[i]
现在这可以最大化,如果两者都按升序排列,因为重新排列不等式(参见这里:http://en.wikipedia.org/wiki/Rearrangement_inequality)并且log是一个递增函数。
所以,按升序排序A,按升序排序B,你就完成了。