class Solution {
public int getMoneyAmount(int n) {
//初始化
int [][]dp = new int[n + 1][n + 1];
//正向无法获得dp[k + 1][j]),需要反向找
for(int i = n - 1; i >= 1; i--){
for(int j = i + 1; j <= n; j++){
dp[i][j] = Integer.MAX_VALUE;
for(int k = i; k < j; k ++){
// 左右二选一得到一个结果,然后取结果中最小的
dp[i][j] = Math.min(dp[i][j], k + Math.max(dp[i][k - 1] , dp[k + 1][j]));
}
}
}
return dp[1][n];
}
}