标签:区间 为什么 long 核心 log code max lis ons
这道题为困难题
这个题最核心的部分就是假设l,r之间有一个数是最后爆的。假设dp[l][r]表示为长度区间l,r的最大得分数(不包括l和r)
为什么要假设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]
标签:区间 为什么 long 核心 log code max lis ons
原文地址:http://www.cnblogs.com/liuxinzhi/p/7638276.html