这一题是dp题,具体可以参考https://www.cnblogs.com/grandyang/p/5006441.html
这一段代码是我自己的,尽量没有用到额外的空间。
public int maxCoins(int[] nums) {
if (nums.length == 0) return 0;
int[][] dp = new int[nums.length][nums.length];
for(int len = 0; len < nums.length; len++) {
for(int i = 0; i < nums.length - len; i++) {
int j = i + len;
for (int k = i; k <= j; k++) {
int leftDp = k == 0 ? 0 : dp[i][k - 1];
int rightDp = k == nums.length - 1 ? 0 : dp[k + 1][j];
int leftBalloon = i == 0 ? 1 : nums[i - 1];
int rightBalloon = j == nums.length - 1 ? 1 : nums[j + 1];
dp[i][j] = Math.max(dp[i][j], leftDp + rightDp + leftBalloon * rightBalloon * nums[k]);
}
}
}
return dp[0][nums.length - 1];
}