【发布时间】:2020-08-11 17:21:57
【问题描述】:
我练习了一段时间的竞技编程,一个随机的问题突然出现在我的脑海中。我在在线网站上找不到解决方案,因此将其发布在这里。
给定两个数组A 和B,它们包含整数且大小相同n。我需要创建一个从A 的元素到B 的元素的一对一映射。假设配对元素是{(p1A,p1B),(p2A,p2B),.....,(pnA,pnB)}。我需要找到最小化p1A*p1B + p2A*p2B + .... + pnA*pnB 的映射。
我们如何解决这个问题?如果您能提供正确答案的证明,那将非常有帮助。
【问题讨论】:
-
我假设 (a) 元素不必按顺序配对,并且 (b) 每个元素必须只配对一次?换句话说,找到
A的排列/改组A'使得sum(A'[i]*B[i] for all i)最小? -
没有尝试过,当然也没有证据,但我的直觉是将 A 中最大的与 B 中的最小配对,依此类推。
-
元素总是积极的/非消极的吗?
-
@tobias_k 是的,您需要找到 A 的排列/改组 A' 使得 sum(A'[i]*B[i] for all i) 最小?
-
@amit 这不是任何网站上的标准问题,所以我试图找到一个没有限制的解决方案,即。数字是整数(正数或负数)。但我想知道如果给出的数字是正数,是否存在简单的解决方案。