1130. Minimum Cost Tree From Leaf Values (區間型
區間型
T: O(n^3)
```java
class Solution {
public int mctFromLeafValues(int[] arr) {
Map<String, Integer> memo = new HashMap<>();
return dfs(arr, 0, arr.length - 1, memo);
}
private int dfs(int[] nums, int i, int j, Map<String, Integer> memo) {
String key = i + "," + j;
if (memo.containsKey(key)) {
return memo.get(key);
}
if (i >= j) {
return 0;
}
int res = Integer.MAX_VALUE;
for (int k = i; k < j; k++) {
int cost = maxRemainNumber(nums, i, k) * maxRemainNumber(nums, k + 1, j);
res = Math.min(res, dfs(nums, i, k, memo) + dfs(nums, k + 1, j, memo) + cost);
}
memo.put(key, res);
return res;
}
private int maxRemainNumber(int[] nums, int start, int end) { // i= 0. 1 2 j = 3
int maxVal = Integer.MIN_VALUE;
for (int i = start; i <= end; i++) {
maxVal = Math.max(maxVal, nums[i]);
}
return maxVal;
}
}
```
Last updated