leecode.1039. 多邊形三角剖分的最低得分
阿新 • • 發佈:2020-12-23
技術標籤:leecode-動態規劃
題目
給定 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。
思路分析
- 令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];
}
};