戳氣球


開區間(i,j)最左邊索引 i,最右邊索引 j。這裏說開區間的意思是,我們只能戳爆 i 和 j 之間的氣球,i 和 j 不要戳。這個區間最後一個被戳爆的氣球就是k。(逆向思維)

前後填充1,[3,1,5]->[1,3,1,5,1],相當於前後兩個氣球不戳破,但是參與計算。

class Solution:
    def maxCoins(self, nums: List[int]) -> int:
        # 前後擴1
        nums.append(1)
        nums.insert(0,1)
        length=len(nums)
        dp=[[0]*(length) for i in range(length)]
        # i從高到低,j從i+1到length左到右
        for i in range(length-1,-1,-1):
            for j in range(i+1,length):
                for k in range(i+1,j):
                    # 只取所有組合中最大的
                    dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+nums[k]*nums[i]*nums[j])
        return dp[0][-1]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章