[记忆化搜索] 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); } };

浙公网安备 33010602011771号