如何最大化总和?
问题内容:
给我们一个排序数组。
令初始值pass
为零。
我们可以多次执行以下操作:
-
一次选择任何
k
数字。全部添加。将此总和加到pass
-
如果
x
是 第一次 从数组中选择一个数字,例如,那么它被认为是x
唯一的。当 第二次 选择 时 ,则将其视为-x
,第三次将其视为x
,依此类推…
例如,让数组为[-14, 10, 6, -6, -10, -10, -14]
和k = 4
,我们将只执行一次操作。我们选择以下4个数字:{14, 10, 6, -6}
。将它们加起来,我们得到24
。然后,pass=pass+24
。因此,通过的最大值为24
。
如何获得的最大值pass
?
问题答案:
我们可以将问题重新表述如下:
我们有一个数字列表,我们可以激活或停用这些数字。我们想要找到激活数字的最大和,在每遍中我们可以精确地切换k
数字。
出于奇怪的原因k
,我们可以执行以下操作:激活最大数字(如果为正数),然后使用其余的(k-1)
开关两次切换任意数字,这将有效地使数字保持其以前的状态。因此,最大值pass
是正数之和。
对于偶数k
,这略有不同,因为已激活数字的数量始终为偶数。因此,我们首先找到所有正数。设正数为p
。如果p
是偶数,那么我们就很好,并且这些数字的总和就是结果。如果p
是奇数,我们必须检查两种情况:删除最小的正数或添加最大的非正数。这两种情况的最大值是结果。
编辑评论:
对于的特殊情况k=n
,只有两个选项:包括所有数字或排除所有数字。如果数字的总和大于0,则为结果。否则,结果为0。