[312][困难][分治][递归][动态规划] 戳气球
题目描述
输入: [3,1,5,8]
输出: 167
解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
coins = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167解题思路
分治递归
最后更新于
输入: [3,1,5,8]
输出: 167
解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
coins = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167最后更新于
class Solution:
def maxCoins(self, nums: List[int]) -> int:
n = len(nums)
val = [1] + nums + [1]
@lru_cache(None)
def coins(left, right):
if left >= right - 1: # left在左侧紧邻right就触发终止条件
return 0
best = 0
for i in range(left + 1, right):
total = val[left] * val[i] * val[right]
total += coins(left, i) + coins(i, right)
best = max(best, total)
return best
return coins(0, n + 1)