leetcode1039. 多边形三角剖分的最低得分(动态规划)

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

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

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

示例 1:

输入:[1,2,3]
输出:6
解释:多边形已经三角化,唯一三角形的分数为 6。

图解状态转移

dp[i][j]代表区间(i,j)内多边形进行三角剖分后可以得到的最低分
leetcode1039. 多边形三角剖分的最低得分(动态规划)_第1张图片

代码

class Solution {
    public int minScoreTriangulation(int[] A) {

        int n=A.length;
        int[][] dp=new int[n][n];
        for(int i=0;i<n;i++)
            Arrays.fill(dp[i],Integer.MAX_VALUE);
        for(int i=0;i<n;i++)
            dp[i][(i+1)%n]=0;
        for(int len=2;len<n;len++)
            for (int left=0;left<n;left++)

            {
                int right=(left+len)%n;
                for(int loc=(left+1)%n;loc!=right;loc=(loc+1)%n)
                    dp[left][right]= Math.min(dp[left][right],dp[left][loc]+dp[loc][right]+A[loc]*A[left]*A[right]);


            }
              return dp[0][n-1];



}
}

你可能感兴趣的:(leetcode,leetcode,动态规划,算法)