给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], …, A[N-1]。
假设您将多边形剖分为 N-2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 N-2 个三角形的值之和。
返回多边形进行三角剖分后可以得到的最低分。
示例 1:
输入:[1,2,3]
输出:6
解释:多边形已经三角化,唯一三角形的分数为 6。
图解状态转移
dp[i][j]代表区间(i,j)内多边形进行三角剖分后可以得到的最低分
代码
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];}
}