1. 程式人生 > 其它 >leecode.1039. 多邊形三角剖分的最低得分

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

技術標籤: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]; } };