我试图解决topcoder竞技场中的练习题:http://topcoder.bgcoder.com/print.php?id=417
根据我的理解,问题的目的是找到最大面积的k-gon,给定一组点D并且k <= n,n是固定值。
让凸壳为D = C(D)
如果n = 3,我已经证明可以通过假设它的顶点是C(D)的子集来构造这样的三角形。 因此,很容易想出k = 3的解决方案:https://stackoverflow.com/a/1621913/4126652
然而,对于n> 3,我不知道如何做到这一点。
以下是我的尝试:
设| C(D)| = l即凸壳是l-gon,
如果n>我很确定具有最大面积的k-gon本身就是凸包,即C(D)
如果n&lt;我很确定最大k-gon的顶点将是C(D)的子集,我无法证明它对于k> 3,并且我无法提出算法来解决,即使这是一个正确的假设。
任何人都可以帮助我吗,我的方法是否正确?你能帮我进一步吗?
答案 0 :(得分:1)
在我的脑袋里摔了几个小时之后,我找到了解决办法。
这是一个动态编程问题:
设dp [m] [o] [r]表示最大面积r-gon,使得起始顶点为m,结束顶点为o(顶点采用循环顺序)。
然后递归关系将是:
dp [m] [o] [r] = max(dp [m] [n] [r-1] + area(m,n,o)),{max over n:m&lt; n&lt; o}
其中area(m,n,o)是由顶点m,n和o形成的三角形区域