Open Tcdian opened 4 years ago
/**
* @param {number[]} nums
* @return {number}
*/
var maxCoins = function(nums) {
const dp = Array.from(new Array(nums.length + 2), () => new Array(nums.length + 2).fill(0));
const points = [1, ...nums, 1];
for (let i = 0; i < points.length; i++) {
for (let j = i - 2; j >= 0; j--) {
for (let k = j + 1; k < i; k++) {
dp[j][i] = Math.max(dp[j][k] + dp[k][i] + points[j] * points[k] * points[i], dp[j][i]);
}
}
}
return dp[0][points.length - 1];
};
function maxCoins(nums: number[]): number {
const dp: number[][] = Array.from(new Array(nums.length + 2), () => new Array(nums.length + 2).fill(0));
const points = [1, ...nums, 1];
for (let i = 0; i < points.length; i++) {
for (let j = i - 2; j >= 0; j--) {
for (let k = j + 1; k < i; k++) {
dp[j][i] = Math.max(dp[j][k] + dp[k][i] + points[j] * points[k] * points[i], dp[j][i]);
}
}
}
return dp[0][points.length - 1];
};
312. Burst Balloons
有
n
个气球,编号为0
到n-1
,每个气球上都标有一个数字,这些数字存在数组nums
中。现在要求你戳破所有的气球。如果你戳破气球
i
,就可以获得nums[left] * nums[i] * nums[right]
个硬币。 这里的left
和right
代表和i
相邻的两个气球的序号。注意当你戳破了气球i
后,气球left
和气球right
就变成了相邻的气球。求所能获得硬币的最大数量。
Example
Note
nums[-1] = nums[n] = 1
,但注意它们不是真实存在的所以并不能被戳破。0 ≤ n ≤ 500
,0 ≤ nums[i] ≤ 100