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

题目

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

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

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

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

示例二

输入:[3,7,4,5]
输出:144
解释:有两种三角剖分,可能得分分别为:375 + 457 = 245,或 345 + 347 = 144。最低分数为 144。
leecode.1039. 多边形三角剖分的最低得分_第1张图片

思路分析

  • 令dp[i][j]为下标为[i,…,j]的最小三角形的最低得分。
  • 分为中间一个切分点k

代码

class Solution {
public:
    int minScoreTriangulation(vector<int>& A) {
        int n = A.size();
        vector<vector<int>> dp(n, vector<int>(n, 0));
        for(int i = n - 3; i >= 0; i--){
            dp[i][i + 2] = A[i] * A[i + 1] * A[i + 2];
            for(int j = i + 3;j < n;j++){
                dp[i][j] = 0x3f3f3f3f;
                for(int k = i + 1;k < j;k++){
                    dp[i][j] = min(dp[i][j],A[i] * A[j] * A[k] + dp[i][k] + dp[k][j]);
                }
            }
        }
        return dp[0][n - 1];
    }
};

你可能感兴趣的:(动态规划)