给定整数数组和阈值,请确定小于或等于阈值的数组子序列的最大和。对于最多15个元素,所有元素均为array[i] >= 2*array[j]
或array[j] >=2*array[i]
,其中j!=i
。
[threshold
最多可以为10 ^ 17,数组的长度最多可以为60
,并且array[i]
可以最多为10^16
。
这里threshold
太高,因此我们无法通过常规背包方法解决。我尝试将其分为三个部分,然后通过回溯通过蛮力获得可能的和的列表,然后合并三个列表以查找结果。但我认为可能会有更理想的方法。
此问题已经精心设置,因此所有常规方法都将耗尽空间。您必须使用提示。
[第1步,对数组大小进行降序排序,然后将其分成最多15个“怪异”数组和一系列元素,例如b1 >= 2*b2
,b2 >= 2*b3
等。
现在,对于怪异的子集中的多达32768个子集,请尝试找出其余子集中最接近的子集。但是,您可以使用以下观察。对于您可以选择包含的任何元素,要么太大而不能包含,要么必须包含。 (因为如果您不包括它,那么所有其余部分加在一起就会得出一个较小的数字。)这使您最多可以考虑45个决策点。