//核心思想一句话:求出动态规划中不变的最小子问题 接着把子问题依次推导出更大的问题 而子问题怎么不受其他子问题的影响的关键就是戳破一个气球的时候认定它是最后一个戳破的 那么就不会影响到其他子问题 用dp[i][j]来表示在(i,j)开区间的最大值 dp[i][j]求的最大值实际上是以i为未破的左气球和以j未破的右气球其中戳破的气球的最大值
function maxCoins(nums) {
let n = nums.length;
let points = [1, ...nums, 1];
let dp = new Array(n + 2).fill(0).map((e) => new Array(n + 2).fill(0));
let l = points.length;
let temp = 2;
for (let i = 0, j = temp; i < l - 2; i++, j++) {
for (let z = i + 1; z < j; z++) {
dp[i][j] = Math.max(
dp[i][j],
dp[i][z] + dp[z][j] + points[i] * points[j] * points[z]
);
}
if (j === l - 1) {
i = -1;
temp++;
j = temp - 1;
}
if (temp === l) {
break;
}
}
return dp[0][n + 1];
}
console.log(maxCoins([3, 8]));