这个问题很容易在 O(n 3 ) 时间内天真地解决。问题是这样的:
数轴上有 N 个独特的点。您想用一组间隔覆盖数轴上的每个点。您可以将间隔放置在任何地方,
B + MX
创建间隔的成本,其中B
是创建间隔的初始成本,是间隔 长度的一半X
,并且是每个间隔长度的成本。您想找到覆盖每个间隔的最低成本。M
样本数据:
Points = {0, 7, 100}
B = 20
M = 5
因此最佳解决方案是 57.50,因为您可以以 20 + 3.5×5 的成本构建一个区间 [0,7],并以 100 + 0×5 的成本在 [100,100] 构建一个区间,总和为 57.50。
我有一个 O(n 3 ) 解决方案,其中 DP 是从[left, right]
. 所以答案将在DP[1][N]
. 对于每一对(i,j)
我只是迭代k = {i...j-1}
和计算DP[i][k] + DP[k + 1][j]
。
然而,这个解决方案是 O(n 3 ) (我认为有点像矩阵乘法)所以它在 N > 2000 时太慢了。有什么办法可以优化这个吗?