首页 > 其他 > 详细

凸多边形的划分

时间:2020-07-17 10:50:34      阅读:46      评论:0      收藏:0      [点我收藏+]

题目描述 

给定一个具有N个顶点的凸多边形,将顶点从1至N标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成N-2个互不相交的三角形,试求这些三角形顶点的权值乘积和至少为多少。

输入描述:

输入第一行为顶点数N
第二行依次为顶点1至顶点N的权值。

输出描述:

输出仅一行,为这些三角形顶点的权值乘积和的最小值。

输入

5
121 122 123 245 231

输出

12214884
n = eval(input())
a = list(map(int, input().split()))
a += a
a = [0] + a
dp = [[1e40 for i in range(200)] for j in range(200)]
for i in range(1, 2 * n + 1):
    dp[i][i + 1] = 0
for len in range(2, n):
    for l in range(1, 2 * n - len + 1):
        r = l + len
        for k in range(l + 1, r):
            dp[l][r] = min(dp[l][r], dp[l][k] + dp[k][r] + a[l] * a[r] * a[k])
ans = dp[1][n]
for i in range(1, n + 1):
    ans = min(ans, dp[i][i + n - 1])
print(ans)

凸多边形的划分

原文:https://www.cnblogs.com/HighLights/p/13328082.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!