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

区间dp

终态时是0与n - 1连成的边和另一个顶点j,遍历0 到n - 1之间的点j,取乘积最小的

则0   j   n - 1,把多边形分成了3份;其中0 j n - 1为三角形,另外两个多边形(也有可能是三角形)

因此dp[0][n - 1] = dp[0][j] + dp[j][n - 1] + values[0] * values[n - 1] * values[j]

推广到i即可

class Solution {
public:
    int dp[55][55];
    int minScoreTriangulation(vector<int>& values) {
        memset(dp, 0, sizeof(dp));
        int n  =values.size();
        for(int j = 2; j < n; j++)
        {
            for(int i = j - 2; i >= 0; i--)
            {
                for(int k = i + 1; k < j; k++)
                {
                    if(dp[i][j] != 0)
                        dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + values[i] * values[j] * values[k]);
                    else
                        dp[i][j] = values[i] * values[j] * values[k] + dp[i][k] + dp[k][j];
                }

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

    }
};
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/15621706.html