funcminScoreTriangulation(values []int)int { n := len(values) dp := make([][]int, n, n) for i := 0; i < n; i++ { dp[i] = make([]int, n, n) } for i := n-3; i >= 0; i-- { for j := i+2; j < n; j++ { if j - i == 2 { dp[i][j] = values[i] * values[i+1] * values[i+2] } else { temp := 2000000000 for k := i+1; k < j; k++ { temp = min(temp, dp[i][k] + dp[k][j] + values[i] * values[k] * values[j]) } dp[i][j] = temp } } } return dp[0][n-1] }
funcmin(i, j int)int { if i <= j { return i } else { return j } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defminScoreTriangulation(self, values: List[int]) -> int: n = len(values) dp = [[float('inf') for _ inrange(n)] for _ inrange(n)]
for i inrange(n-1): dp[i][i+1] = 0
for d inrange(2, n): for i inrange(0, n - d): j = i + d for k inrange(i+1, j): dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + values[i] * values[k] * values[j]) return dp[0][n - 1]