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

给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], …, A[N-1]。

假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。

返回多边形进行三角剖分后可以得到的最低分。

leetcode - 1039. 多边形三角剖分的最低得分_第1张图片
leetcode - 1039. 多边形三角剖分的最低得分_第2张图片
leetcode - 1039. 多边形三角剖分的最低得分_第3张图片
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-score-triangulation-of-polygon
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————————————————————————————————
解题思路:

使用动态规划,建立一个二维数组,dp[i][j]表示从第i点到第j点分割的三角形的总和的最小值。

状态转移方程为:
dp[i][j] = min(dp[i][j],A[i]*A[k]*A[j]+dp[i][k]+dp[k][j]),其中i

最终返回的结果为dp[0][length-1]

C++代码如下:

class Solution {
public:
    int minScoreTriangulation(vector& A) {
        int length = A.size();
        vector> dp(length,vector(length,INT_MAX));   //初始化为最大值
        for(int i = 0;i=0;j--)
            {
                if(i-j<2)    //如果两点之间的距离小于3,则不能构成三角形
                    dp[j][i]=0;
                else
                    for(int k = j+1;k

你可能感兴趣的:(LeetCode算法题)