【发布时间】:2019-10-28 16:21:30
【问题描述】:
给定一个整数数组和一个阈值,确定数组中小于或等于阈值的任何子序列的最大和。对于除最多 15 个元素之外的所有元素,array[i] >= 2*array[j] 或 array[j] >=2*array[i] 其中j!=i。
threshold最大可达10^17,数组长度最大可达60,array[i]最大可达10^16。
这里threshold太高了,不能用普通的背包法解决。我尝试将这个数组分成三部分,然后通过回溯通过蛮力获取可能总和的列表,然后合并三个列表以查找结果。但我认为可能有更优化的方式来做到这一点。
【问题讨论】:
-
欢迎来到 StackOverflow!从您的问题看来,您已经有了一些工作代码;请将其添加到您的问题中,以便人们可以更轻松地提供帮助。此外,这似乎是一个优化问题,而不是关于错误的问题;这类问题最好在Code Review SE site 上提出
-
但您不必创建一个数组来正确存储可用的总和(这意味着“存储的最大总和的大小”)?您是否尝试将总和存储到地图/集合中?
-
我们可以将 sum 存储在 set 或 map 中,但可能有 2^(length of array) sums 。这种复杂性等于蛮力解决方案。
标签: algorithm data-structures knapsack-problem