最大化两个数组元素乘积和的算法
Algorithm to maximize the sum of product of elements of two arrays
在一次竞赛中有一个问题要求计算只有数学和生物科目的班级的成绩。所以,有n个不。数学学生& &;"n"。生物系学生。每个学生都有自己的分数。数学学生和生物学生的分数分别存储在数组mathScore[]和bioScore中。整个班级的成绩计算如下:(mathScore [0] * bioScore [0] + mathScore [1] * bioScore [1 ] + .......+ mathScore (n - 1) * bioScore [n])
用mathScore[0]表示第一个数学学生的分数。bioScore[0]也是如此。
现在给定一个值'm',我们必须最大化这个类的总分。我们可以通过增加或减少任何候选人的分数1来做到这一点,最多是m次。问题是,你只能增加一个组的分数。不是数学就是生物。
现在来解决这个问题,据我所知,这个问题需要两步。首先是决定选哪一组,即数学还是生物。第二步是从被选中的组中选择学生,这样增加或减少这些特定(被选中的)学生的分数将使表现最大化。
我试着思考第一步,这样:考虑这是class
的分数Maths Score : 5 7 4 -3
Bio Score : -2 3 9 2
m = 1;因此,我们将遍历math分数数组。同时比较生物系学生的相应成绩。所以,我们选择了math数组。因为如果我们只需要增加一次。那么增加math数组中的4将是有益的。因为它会使整体性能提高9倍。哪个是最大的。
第二步也是同样的方法。找出另一组中对应得分最高的分数。增加特定元素
现在,这是一个有点粗略的想法。但它并不是适用于所有的可能性。所以,任何帮助都将是感激的。
注:我不是大学生。这不是家庭作业
我们有Sum(Abs(o[i])) == m
, m > 0
, a[i]
, b[i]
, m
固定。
Sum( (a[i] + o[i]) * b[i]) == Sum(a[i] * b[i]) + Sum(o[i] * b[i])
要最大化它,我们只需要最大化
Sum(o[i] * b[i])
还有
o[i] * b[i] <= Abs(o[i] * b[i])
当我们选择o[i]
的符号时,我们可以最大化
Sum(Abs(o[i] * b[i]))
Sum(Abs(o[i]) * Abs(b[i]))
和
Max(Sum(Abs(o[i]) * Abs(b[i]))) <= m * Max(Abs(b[i]))
和j
所以b[j] == Max(Abs(b[i]))
o[j] == sign(b[j]) * m
o[i] == 0
,我们有
Sum(o[i] * b[i]) == m * Max(Abs(b[i]))
所以你必须找到两个数组的最大值(绝对值)
在你的例子中
Maths Score : 5 7 (4+m) -3
Bio Score : -2 3 9 2
,例如:
Maths Score : 5 7 (4-m) -3
Bio Score : -2 3 -9 2
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 返回arg_min和可选min_val的算法
- 校准和归一化来自多个温度传感器的读数的算法
- 使用opencv在受控环境中进行视频跟踪的跟踪标记和跟踪算法选择
- 回忆和天真算法-2个不同的答案
- 接收数字和数字的算法并检查数字内部数字的次数
- 在二叉搜索树中查找最小和的算法改进
- (C语言)将RGB转换为HSV和HSV的算法在两者的范围为0-255范围内
- 质数搜索算法(两种不同的算法)和Prime表的使用
- C++:用于查找最小周期边和的快速算法
- 有效的算法来检查是否存在具有相同值的行和列
- 关于列表和最大乘积的算法
- 将每个可能的异或和子数组的和相加的算法
- 使用锁和 STL 算法对 C++ 向量进行排序,或者编写一个没有锁的更复杂的算法
- 复杂性和大 - 算法的O
- 在多个相互依赖的线程上进行封送处理和等待的算法、模式或最佳实践
- 对一组数字进行排序的最快数据结构(和排序算法)是什么
- 分析涉及按位运算和 2 的幂的算法
- C++ 和 Python 中的算法相同,但输出不同
- 最大化两个数组元素乘积和的算法