leetcode 312 戳氣球(區間dp)

2021-10-06 20:16:16 字數 722 閱讀 3702

312. 戳氣球

難度困難297

n個氣球,編號為0n-1,每個氣球上都標有乙個數字,這些數字存在陣列nums中。

現在要求你戳破所有的氣球。每當你戳破乙個氣球i時,你可以獲得nums[left] * nums[i] * nums[right]個硬幣。 這裡的leftright代表和i相鄰的兩個氣球的序號。注意當你戳破了氣球i後,氣球left和氣球right就變成了相鄰的氣球。

求所能獲得硬幣的最大數量。

說明:

首先我們可以想到區間dp,假設dp[l][r]為區間[l,r]產生的最大硬幣數量,接下來考慮轉移,區間dp轉移時候一般都是考慮在**切一刀,然後劃分為子區間,這裡我們切一刀的意思轉化為(l,r)區間內剩餘的乙個氣球,從而打到轉移的目的。為了我們計算的方便,我們的[l,r]轉為(l,r)來討論。

dp[l][r] = max(dp[l][i] + dp[i][r] + arr[l]*arr[i]*arr[r]) for i in len(arr)

class solution 

};

LeetCode312 戳氣球(難)

看了大概7 8分鐘,沒有思路。自己暴力的想法是n的階乘級別,也難寫。直接看題解,很巧妙,很驚嘆。參考講解 經典動態規劃 戳氣球 直接上 class solution dp i j 表示搓破 i,j 之間的氣球獲得的最大硬幣數量 邊界條件 dp i i 0,它們之間沒有氣球,dp i i 1 0 它們...

leetcode 312 戳氣球(動態規劃)

有 n 個氣球,編號為0 到 n 1,每個氣球上都標有乙個數字,這些數字存在陣列nums中。現在要求你戳破所有的氣球。每當你戳破乙個氣球i時,你可以獲得nums left nums i nums right 個硬幣。這裡的left和right代表和i相鄰的兩個氣球的序號。注意當你戳破了氣球 i 後,...

leetcode 312 戳氣球(動態規劃)

題目描述 有 n 個氣球,編號為0 到 n 1,每個氣球上都標有乙個數字,這些數字存在陣列 nums 中。現在要求你戳破所有的氣球。戳破第 i 個氣球,你可以獲得 nums i 1 nums i nums i 1 枚硬幣。這裡的 i 1 和 i 1 代表和 i 相鄰的兩個氣球的序號。如果 i 1或 ...