码迷,mamicode.com
首页 > 其他好文 > 详细

312. 戳气球. dp

时间:2020-07-21 10:03:33      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:有一个   官方   解释   val   著作权   大数   tps   硬币   coin   

有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组?nums?中。

现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得?nums[left] * nums[i] * nums[right]?个硬币。?这里的?left?和?right?代表和?i?相邻的两个气球的序号。注意当你戳破了气球 i 后,气球?left?和气球?right?就变成了相邻的气球。

求所能获得硬币的最大数量。

说明:

你可以假设?nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被戳破。
0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100
示例:

输入: [3,1,5,8]
输出: 167
解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
? coins = 315 + 358 + 138 + 181 = 167

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/burst-balloons
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

技术图片

class Solution:
    def maxCoins(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [[0] * (n + 2) for _ in range(n + 2)]
        val = [1] + nums + [1]

        for i in range(n - 1, -1, -1):
            for j in range(i + 2, n + 2):
                for k in range(i + 1, j):
                    sum = val[i] * val[k] * val[j]
                    sum += dp[i][k] + dp[k][j]
                    dp[i][j] = max(dp[i][j], sum)
        
        return dp[0][n + 1]

312. 戳气球. dp

标签:有一个   官方   解释   val   著作权   大数   tps   硬币   coin   

原文地址:https://www.cnblogs.com/xgbt/p/13349448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!