C++ 最大化两个数组元素乘积和的算法

C++ 最大化两个数组元素乘积和的算法,c++,arrays,algorithm,math,C++,Arrays,Algorithm,Math,在一次竞赛中,有一个问题要求计算只包含数学和生物科目的班级的成绩。因此,数学系学生和生物系学生的数量分别为n和n。每个学生都有自己的分数。数学学生和生物学生的分数分别存储在数组mathScore[]和bioScore中。整个班级的表现计算如下: (mathScore[0]*bioScore[0]+mathScore[1]*bioScore[1]+..+mathScore[n-1]*bioScore[n-1]) mathScore[0]代表第一个数学学生的分数。bioScore[0]也是如此 现在

在一次竞赛中,有一个问题要求计算只包含数学和生物科目的班级的成绩。因此,数学系学生和生物系学生的数量分别为n和n。每个学生都有自己的分数。数学学生和生物学生的分数分别存储在数组mathScore[]和bioScore中。整个班级的表现计算如下: (mathScore[0]*bioScore[0]+mathScore[1]*bioScore[1]+..+mathScore[n-1]*bioScore[n-1])

mathScore[0]代表第一个数学学生的分数。bioScore[0]也是如此

现在给定一个值'm',我们必须最大化班级的整体分数。我们可以通过增加或减少任何候选人的分数1,最多“m”次来实现。现在的问题是,你只能增加一组的分数。不是数学就是生物

现在来解决这个问题,根据我的说法,这个问题需要两个步骤。首先是决定选择哪一组,即数学组或生物组。第二步是从选定的组中选择学生,这样增加或减少这些特定(选定的)学生的分数将使成绩最大化

我试着这样思考第一步: 考虑这是班级

的分数。
Maths Score :  5  7  4 -3
Bio Score   : -2  3  9  2
m=1时; 因此,我们将迭代数学分数数组。同时比较生物专业学生的相应成绩。因此,我们选择了数学数组。因为如果我们只需要增加一次。然后在数学数组中增加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])
那是

Sum(Abs(o[i]) * 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

个人得分是否始终为正?这会对问题产生很大的影响。很好的家庭作业。您是否与发布要求的讲师交谈过?否,个人分数可以是正面的,也可以是负面的。我已经通过示例详细阐述了它。最后一个(或第四个)学生的数学成绩为“-3”。@ThomasMatthews,正如我已经提到的,这个问题是在一次竞赛中提出的。所以,我需要自己去做。没有教练可以帮忙,有什么可能不起作用?
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