如何最大化总和?
How to maximize the sum?
我们得到了一个排序数组。
令pass
的初始值为零。
我们可以多次执行以下操作:
Select 一次任何 k
个数字。把它们都加起来。将此总和添加到 pass
如果一个数字,比如说 x
,select第一次从数组中编辑,那么它是仅被视为 x
。当select第二次编辑时,它被认为是-x
,第三次,又是x
,并且等等...
例如数组为[-14, 10, 6, -6, -10, -10, -14]
和k = 4
,我们只做一次运算。我们select这4个数字:{14, 10, 6, -6}
。将它们相加,我们得到 24
。然后,pass=pass+24
。因此,pass的最大值为24
.
如何获取pass
的最大值?
我们可以重新表述问题如下:
我们有一个号码列表,我们可以激活或停用这些号码。我们想要找到激活数字的最大总和,在每次传递中我们可以精确地切换 k
个数字。
对于奇数k
,我们可以这样做:激活最大数(如果是正数)并使用剩余的(k-1)
开关切换任意数字两次,这将有效地离开以前状态的编号。因此,最大pass
值是正数之和。
对于偶数k
,这略有不同,因为激活号码的数量总是偶数。因此,我们首先找到所有正数。设正数的个数为p
。如果 p
是偶数,那么我们就很好,这些数字的总和就是结果。如果 p
是奇数,我们必须检查两种情况:删除最小的正数或添加最大的 non-positive 数。这两种情况的最大值就是结果。
根据评论编辑:
对于k=n
这种特殊情况,只有两种选择:要么包括所有数字,要么排除所有数字。如果数字之和大于 0,这就是结果。否则,结果为 0。
我们得到了一个排序数组。
令pass
的初始值为零。
我们可以多次执行以下操作:
Select 一次任何
k
个数字。把它们都加起来。将此总和添加到pass
如果一个数字,比如说
x
,select第一次从数组中编辑,那么它是仅被视为x
。当select第二次编辑时,它被认为是-x
,第三次,又是x
,并且等等...
例如数组为[-14, 10, 6, -6, -10, -10, -14]
和k = 4
,我们只做一次运算。我们select这4个数字:{14, 10, 6, -6}
。将它们相加,我们得到 24
。然后,pass=pass+24
。因此,pass的最大值为24
.
如何获取pass
的最大值?
我们可以重新表述问题如下:
我们有一个号码列表,我们可以激活或停用这些号码。我们想要找到激活数字的最大总和,在每次传递中我们可以精确地切换 k
个数字。
对于奇数k
,我们可以这样做:激活最大数(如果是正数)并使用剩余的(k-1)
开关切换任意数字两次,这将有效地离开以前状态的编号。因此,最大pass
值是正数之和。
对于偶数k
,这略有不同,因为激活号码的数量总是偶数。因此,我们首先找到所有正数。设正数的个数为p
。如果 p
是偶数,那么我们就很好,这些数字的总和就是结果。如果 p
是奇数,我们必须检查两种情况:删除最小的正数或添加最大的 non-positive 数。这两种情况的最大值就是结果。
根据评论编辑:
对于k=n
这种特殊情况,只有两种选择:要么包括所有数字,要么排除所有数字。如果数字之和大于 0,这就是结果。否则,结果为 0。