可以使用三種方法:
回溯法,回溯法可以遍歷每一種可能,屬於暴力解法。
分治法,分治法首先要得到狀態轉移方程。
dp動態規劃
首先為陣列增加首位
fun(i,j)相當於不戳邊界 i,j。戳其中的任意乙個氣球得到的硬幣數。
對於確定的最後戳中間k索引的氣球fun(i,j)=fun(i,k)+fun(k,j)+nums[i]*nums[k]*nums[j];
所以有fun(i, j)=max;對於所有的k來說。
使用cache[i][j]來儲存結果,避免重複計算。
public int maxcoins(int nums)
public int helper(int nums,int start,int end,int cache)
}} return dp[0][n_helper.length-1];
}
312 戳氣球 動態規劃
難度 困難 2020 7 19每日一題打卡 題目描述 解題思路 今天是抄答案而且還抄的迷迷糊糊的一天 知道要這樣做,但是仔細去想為什麼是這樣的,又說不出個所以然 首先在陣列左右兩端新增虛擬氣球節點,是不能被戳破的,這樣能方便處理邊界,而且保證總是有三個氣球相乘。然後注意動態規劃的順序,要從區間右邊開...
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 後,...