竞赛中有一个问题需要计算仅包含数学和生物科目的班级的表现。所以,没有。数学学生 & '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;
因此,我们将迭代数学分数数组。同时比较Bio学生的相应成绩。因此,我们选择了 Maths 数组。因为如果我们只需要增加一次。那么增加 Maths 数组中的 4 将会是有益的。因为它会将整体性能提高 9。这是最大的。
第二步的方法也是如此。找出另一组中对应分数最高的分数。增加该特定元素。
现在,这是一个有点粗略的想法。但它并不适用于所有可能性。因此,任何帮助将不胜感激。
附:我不是大学生。这不是家庭作业。
We have Sum(Abs(o[i])) == m
m > 0
, and a[i]
, b[i]
, m
fixed.
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]))
which is
Sum(Abs(o[i]) * Abs(b[i]))
and
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)