我正在尝试查看动态编程的一些注释和示例,并且我很难弄清楚它是如何工作的。我会发布问题,然后我遇到困难:
给定从左到右排序的点序列p1 =(x1,y1),...,pn =(xn,yn)(即,x1
我认为子问题应该这样划分:
C [i,j] =从p1到pi的多边形链,带有j个边,最小化垂直距离的总和。
然后答案是:C [n,k]
基本情况:C [i,0] = 0
现在我在提出递归公式时遇到了一些困难。我的第一个问题,我是否正确地打破了子问题?这个问题提供了一个暗示,使它看起来像我做的,但我不是100%肯定。如果我是,有关如何继续推导递归公式的任何提示?
感谢任何帮助。
答案 0 :(得分:1)
您的子问题是正确的,但我认为对配方的一些改变可以帮助您提出公式:
不是让C(i, j)
表示从j到1的任何从1到i的链,而是具体表示“以i结尾的链”。然后,要确定C(i, j)
的答案,您只需要尝试最后一条边开始的所有可能性。
然后答案可能是所有C(i, k)
的最佳选择。