Minimum Score Triangulation of Polygon

Medium
Watch on YouTube ↗

Solution

class Solution {
    public int minScoreTriangulation(int[] values) {
        int n = values.length;
        int dp[][] = new int[n][n];
        for(int i=0; i<n; i++) {
            Arrays.fill(dp[i],-1);
        }
        return helper(values, 0, n-1, dp);
    }

    int helper(int[] values, int i, int j, int dp[][]) {
        if(i+1==j)
            return 0;

            if(dp[i][j]!=-1) {
                return dp[i][j];
            }
    

    int ans = Integer.MAX_VALUE;

    for(int k=i+1; k<j; k++) {
        ans = Math.min(ans, values[i]*values[j]*values[k] + helper(values, i, k, dp) + helper(values, k, j, dp));
    }
    dp[i][j] = ans;

    return ans;
    }
}

/* Recursive solution - TLE */
class Solution {
    public int minScoreTriangulation(int[] values) {
        int n = values.length;
        return helper(values, 0, n-1);
    }

    int helper(int[] values, int i, int j) {
        if(i+1==j)
            return 0;
    

    int ans = Integer.MAX_VALUE;

    for(int k=i+1; k<j; k++) {
        ans = Math.min(ans, values[i]*values[j]*values[k] + helper(values, i, k) + helper(values, k, j));
    }

    return ans;
    }
}