【发布时间】:2013-01-02 08:10:15
【问题描述】:
我正在考虑以下问题的算法(在 carrercup 上找到):
给定一个具有 N 个顶点和 N 个边的多边形。每个顶点上都有一个 int 数(可能是负数),每条边上都有一个 set(*,+) 中的操作。每次,我们从多边形中删除一条边 E,将由边(V1,V2)链接的两个顶点合并为一个新顶点,其值为:V1 op(E) V2。最后一种情况是两个顶点有两条边,结果是更大的一个。 返回可以从给定多边形中获取的最大结果值。
我认为我们可以只使用贪婪的方法。 IE。对于具有 k 个边的多边形,找到一对 (p, q),它在折叠时产生最大数量: (p ,q) = max ({i operation j : i, j - 相邻边)
然后只调用多边形的递归: 1. 让函数 CollapseMaxPair( P(k) ) - 获取具有 k 个边的多边形并返回具有 k-1 个边的“折叠”多边形 2.然后我们的递归:
P = P(N);
Releat until two edges left
P = CollapseMaxPair( P )
maxvalue = max ( two remained values)
你怎么看?
【问题讨论】:
标签: algorithm language-agnostic polygon