问题如下:
给定n个点的序列p_1 =(x_1,y_1),...,p_n =(x_n,y_n)并且从左到右排序x坐标(即x_1
由于我很难写一个例子来测试,所以我不知道我的答案是否正确。
答案如下:
首先,我在pi处定义C [i,j] =多边形链端,j边缘是垂直距离的最小总和。答案应该是C [n,k]。
对于基本情况,当j> = i时,我定义C [i,0] = 0和C [i,j] = +无穷大。
对于递归公式,我定义C [i,j] = minimum(1< p< i){C [p,j-1] + f(p,i)}
我的回答有什么问题吗?谢谢。
答案 0 :(得分:1)
最好使用不在P
(p_i
的集合)中的点作为链。
P = {(0, 0), (1, 1), (3, 1), (4, 0)}
k = 2
+ (2,2)
* (1,1) * (3,1)
* (0,0) * (4,0)
P
中包含点数的链条有两种可能性,两者都有f(1,4) = 2/3
。将(2, 2)
作为链点给出f(1,4) = 0
。
在没有限制链接点在P
中的问题的解决方案可能难以用DP方式描述。它看起来更像是具有很多约束的回归问题。
我认为在这个问题中,链点应该来自P
。
<强>更新强>
较低的递归与原始递归相同,如j_random_hacker所述。
我认为定义稍微不同的功能会更好。将C(a, b, e)
定义为具有p_a
边缘的点p_b
和e
之间链的最低成本。我们问题的答案是C(1, n, k)
。
C(a, b, 1) = f(a,b)
C(a, a+i, i) = 0
C(a, b, k) = inf, k > b-a
可以使用不同的递归。这个是最后一个边缘的“长度”:
C(a, b, k+1) = min( C(a, c, k) + C(i, b, 1) ), for i in a+k, b-1