我试图解决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
最佳答案 在打破我的头几个小时后,我想出了解决方案.
这是一个动态编程问题:
令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< n< Ø} 其中area(m,n,o)是由顶点m,n和o形成的三角形的面积