ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1039多边形三角剖分的最低得分

2020-02-01 12:56:40  阅读:225  来源: 互联网

标签:__ 多边形 剖分 nums 1039 三角形 dp size


题目:给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], ..., A[N-1]。假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。返回多边形进行三角剖分后可以得到的最低分。

来源:https://leetcode-cn.com/problems/minimum-score-triangulation-of-polygon/

法一:自己的代码    与戳气球代码类似

思路:先要读懂题意,这个题是只能剖分边上的三角形,可以理解为只切一刀就切出一个三角形,如果要是可以任意切,那这个题就无法求解了,因为涉及到不同数字的合并问题,题中并没有说,所以是只切边上的三角形.

注意这是个环形问题,所以在两边加上两个数字,动态规划最后合并的时候只要中间剩下三个数字就可停止,比如原先是长度为6的数组,2,3,4,5,6,1.先补数字左边补1,右边补2,1 2 3 30 2 中间是2 4 30 30这个是合并后的,此时中间的2 3事实上已经都用过了,所以不能再合并了,30就是最后的结果。这些问题可以先用简单的数字输出结果,观察dp中数据的特点,再修改算法。

from typing import List
class Solution:
    def minScoreTriangulation(self, A: List[int]) -> int:
        ans = 0
        # 为了方便后续写状态转移方程,添加边界条件
        nums = [A[-1]] + A + [A[0]]
        size = len(nums)
        dp = [[0] * size for i in range(size)]
        # 注意这里size-3,右上角的三个不需要输出
        for start in range(1, size-3):
            i = 1
            print('-' * 20)
            for j in range(start, size - 1):
                print(i, j)
                # 同戳气球的一样
                dp[i][j] = min(nums[i - 1] * nums[k] * nums[j + 1] + dp[i][k - 1] + dp[k + 1][j]
                               for k in range(i, j + 1))
                i += 1
        print(dp)
        return min(dp[1][size - 4], dp[2][size-3], dp[3][size-2])
if __name__ == '__main__':
    duixiang = Solution()
    a = duixiang.minScoreTriangulation( A=[1,3,1,4,1,5])
    # a = duixiang.minScoreTriangulation( A=[3,7,4])
    print(a)
View Code

法二:

标签:__,多边形,剖分,nums,1039,三角形,dp,size
来源: https://www.cnblogs.com/xxswkl/p/12248138.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有