Burst Balloons
Posted 唐僧洗发爱飘柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Burst Balloons相关的知识,希望对你有一定的参考价值。
这道题为困难题
题目:
思路:
这个题最核心的部分就是假设l,r之间有一个数是最后爆的。假设dp[l][r]表示为长度区间l,r的最大得分数(不包括l和r)
- 当k == 2时,l = 0, r = 2; l = 1, r = 3; ……
- 当k == 3时,l = 0, r = 3; l = 1, r = 4;…..
- .k继续增大
为什么要假设p是最后一个爆的呢?因为它最后爆,那么它的左半部分和有右半部分就可以独立执行,这样的话就可以把l,r分成两部分,即dp[i][p]和dp[p][r],然后剩下一个p就再加上nums[l]*nums[p]*nums[r](因为之前dp[l][r]不包括l和r,所以p爆的时候他的左右l和r存在)。
代码:
1 class Solution(object): 2 def maxCoins(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: int 6 """ 7 nums = [1] + nums + [1] 8 list_long = len(nums) 9 dp = [[0] * list_long for _ in xrange(list_long)] 10 for k in xrange(2,list_long): 11 for l in xrange(list_long - k): 12 r = k + l 13 for p in xrange(l+1, r): 14 dp[l][r] = max(dp[l][r], dp[l][p] + dp[p][r] + nums[l]*nums[p]*nums[r]) 15 return dp[0][list_long-1]
以上是关于Burst Balloons的主要内容,如果未能解决你的问题,请参考以下文章