题面:https://leetcode-cn.com/problems/burst-balloons/
题意
有$n$个气球,编号为$0$到$n-1$,每个气球上都标有一个数字,这些数字存在数组$nums$中。
现在要求你戳破所有的气球。
每当你戳破一个气球$i$时,你可以获得$ nums[left] \times nums[i] \times nums[right]$ 个硬币。 这里的$left$和$right$代表和$i$相邻的两个气球的序号。注意当你戳破了气球$i$后,气球$left$和气球$right$就变成了相邻的气球。
求所能获得硬币的最大数量。
解法
肯定是dp了。
而且是一个区间dp。令$dp[i][j]$表示戳破$i+1, i+2, …, j - 1$个气球
设$k$是$i$到$j$中最后一个被戳破的气球,则有
然后区间长度从小到大转移即可。
代码
动态规划
1 | class Solution { |
记忆化写法
1 | class Solution { |