竞赛的时候这题没做出来
class Solution {
public int mctFromLeafValues(int[] arr) {
int[][] mem_arr = new int[arr.length][arr.length];
for(int len = 1; len <= arr.length; ++len){
for(int begin = 0; begin <= arr.length - len; ++begin){
for(int i = begin; i <= begin + len - 1; ++i){
if(arr[i] > mem_arr[begin][begin + len - 1]){
mem_arr[begin][begin + len - 1] = arr[i];
}
}
}
}
int[][] dp_arr = new int[arr.length][arr.length];
for(int len = 1; len <= arr.length; ++len){
for(int begin = 0; begin <= arr.length - len; ++begin){
if(len == 1){
dp_arr[begin][begin + len - 1] = 0;
}else{
dp_arr[begin][begin + len - 1] = Integer.MAX_VALUE;
for(int i = begin; i <= (begin + len - 1 - 1); ++i){
int temp = mem_arr[begin][i] * mem_arr[i + 1][begin + len - 1] + dp_arr[begin][i] + dp_arr[i + 1][begin + len - 1];
dp_arr[begin][begin + len - 1] = Math.min(dp_arr[begin][begin + len - 1], temp);
}
}
}
}
return dp_arr[0][arr.length - 1];
}
}
其实这就是《简直offer》里的题的变形而已。