Arrays 如何使总和最大化?
我们得到一个排序数组 让Arrays 如何使总和最大化?,arrays,algorithm,sorting,implementation,Arrays,Algorithm,Sorting,Implementation,我们得到一个排序数组 让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
数字。把它们都加起来。将此总和添加到pass
x
,则该数字仅被视为x
。第二次选择时,它被视为-x
,第三次被视为x
,依此类推[-14,10,6,-6,-10,-10,-14]
和k=4
,我们只执行一次操作。我们选择这4个数字:{14,10,6,-6}
。把它们加起来,我们得到24个。然后,pass=pass+24
。因此,通过的最大值为24
如何获得通过的最大值?我们可以将问题重新表述如下: 我们有一个号码列表,我们可以激活或停用号码。我们希望找到激活的数字的最大总和,在每次过程中,我们可以精确地切换
k
数字
对于奇数k
,我们可以执行以下操作:激活最大数(如果为正数),并使用剩余的(k-1)
开关切换任意数两次,这将有效地使该数保持其先前的状态。因此,最大pass
值是正数之和
对于偶数k
,这略有不同,因为激活号码的数量始终为偶数。因此,我们首先找到所有的正数。让正数的数目为p
。如果p
是偶数,那么我们是好的,这些数字的总和就是结果。如果p
为奇数,我们必须检查两种情况:删除最小的正数或添加最大的非正数。这两种情况的最大值就是结果
根据评论编辑:
对于
k=n
的特殊情况,只有两个选项:包括所有数字或排除所有数字。如果数字之和大于0,则为结果。否则,结果为0。对于家庭作业类型的问题,请参见如何提问。具体来说,请提供您已经尝试过的内容的信息,并提供一个。我的第二点仍然站不住脚。如果对运算次数没有限制,那么在无休止的加法之后可能会得到最大和。不,您的逻辑不正确。有限的移动次数就足够了。@Firexsecred这听起来好像您已经有了一个解决方案。是这样吗?评论不是为了进一步讨论;这段对话已经结束。