原题链接:https://leetcode-cn.com/problems/minimum-score-triangulation-of-polygon/
和矩阵连乘问题相似
动态规划:
dp[i][j]表示区间[i,j]上多边形最小值
状态转移:
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+A[i]*A[k]*A[j]);
代码:
int minScoreTriangulation(vector<int>& A) {
int N=A.size();
vector<vector<int>> dp(N,vector<int>(N,INT_MAX));
for(int i=0;i<N-1;i++){
dp[i][i+1]=0;//相邻的两个无法连成三角形
}
for(int len=2;len<N;len++){
for(int i=0;i<N-len;i++){
int j=i+len;
for(int k=i+1;k<j;k++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+A[i]*A[k]*A[j]);
}
}
}
return dp[0][N-1];
}
拿N=6举例,代码运行过程: