[记忆化搜索] leetcode 1039 Minimum Score Triangulation of Polygon

problem:https://leetcode.com/problems/minimum-score-triangulation-of-polygon/

        记忆化搜索。这道题主要的难点在于如何划分子问题,以某一点为基础,直接一分为二是会漏掉不少情况的;而由于边一定存在于某个三角形中,我们可以选定特定边,然后使得边对应的两个点分别在不同集合中,进行二分。

class Solution {
public:
    vector<vector<int>> dp;
    int dfs(vector<int>& A, int i, int j)
    {
        if (j - i < 2) return 0;
        if (dp[i][j] != -1) return dp[i][j];
        int result = INT_MAX;
        for (int k = i + 1; k < j; k++)
        {
            int d = A[k] * A[i] * A[j];
            result = min(result, d + dfs(A, i, k) + dfs(A, k, j));
        }
        return dp[i][j] = result;
    }
    int minScoreTriangulation(vector<int>& A) {
        dp.resize(A.size(), vector<int>(A.size(), -1));
        return dfs(A, 0, A.size() - 1);
    }
};

 

posted @ 2019-08-08 14:13  fish1996  阅读(155)  评论(0)    收藏  举报