动态规划之凸多边形最优三角形剖分
题目来源:中国石油大学ACM俱乐部开放训练题
题目介绍:
众所周知,sciorz会画画。某天,sciorz画了一个凸多边形,这个多边形的每个顶点有一个权值a[i]。sciorz觉得这个凸多边形不够美丽,于是他决定在n个点之间连线,最终用n-3条不相交的线将这个凸多边形分隔成n-2个三角形。sciorz认为,一个三角形的美丽值是三个顶点权值的乘积,凸多边形的美丽值是其内部三角形美丽值之和。sciorz想到了一种分割方案,使这个凸多边形的美丽值最大,sciorz忙着刷题,所以他随手就把这个签到题扔给你,希望你帮sciorz算出最大的美丽值。
输入:
第一行一个t,表示有t组样例。 每组样例的第一行是一个n,表示多边形的边数。 第二行n’个数,第i个数表示多边形第i个顶点的权值a[i],按逆时针方向给出。
输出:
对于每组样例,输出一行。格式为“Case #x:y”,x为样例编号,y为答案。
样例输入:
2 3 1 2 3 4 1 2 3 4
样例输出:
Case #1:6 Case #2:32
原理:
dp[i][j]表示从i到j的最优剖分方案,其中,当j=i或j=i+1时无法构成三角形;当j>=i+2时可以构成三角形,此时定义一个分割点k,将整个凸多边形分成三个部分,ik部分,kj部分和三角形ikj,然后运用递归分别求解ik和kj部分,最后求其最大值。
代码实现:
1 | import java.util.Scanner; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yrian's Blog!
评论