给定正象限中的一系列加权点,我们必须找到 点的最大权重序列,以便每个连续点包含在 由前一点和原点形成的矩形。
我对这个问题的DP算法很感兴趣。
答案 0 :(得分:1)
这个问题确实是要求增加最长的子序列。用于解决此问题的O(N log N)算法在wikipedia page上进行了描述。
我假设你有整数点。如果不这样做,则可以使用坐标压缩将点放在N x N网格中。
所以你有一个二维数字数组W,其中每个数字是分配给该坐标的权重。你现在有一个复发:
// T(w,h) = "Maximum weight of the point sequence in sub-grid (w,h)"
T(0,0) = W(0,0)
T(0,y) = W(0,y)+T(0,y-1)
T(x,0) = W(x,0)+T(x-1,0)
T(x,y) = W(x,y)+max(T(x-1,y),T(x,y-1))
您可以memoize重复T(O(N²)空间)或一次计算一行(O(N)空间)。两种算法都使用O(N²)时间。
您可以尝试使用笔和纸来计算这种重现,看看它是如何工作的。