動態規劃 擊爆氣球 Burst Balloons

2022-08-11 09:57:10 字數 814 閱讀 1127

2018-10-03 19:29:43

問題描述:

問題求解:

很有意思的題目,首先想到的是暴力遍歷解空間,當然也用到了memo,可惜還是tle,因為時間複雜度確實有點過高了,應該是o(n!)。

mapmap = new hashmap<>();

public int maxcoins(int nums)

private int helper(linkedlistlist)

map.put(list, res);

return res;

}

本題給出了資料規模,基本已經提示了時間複雜度為o(n^3)左右比較合適。下面給出本題的標準解法,使用的是動態規劃演算法。

dp[i][j]:nums[i]到nums[j]能獲得的最高分數

dp[i][j] = max(dp[i][k - 1] + nums[i - 1] * nums[k] * nums[j + 1] + dp[k + 1][j]) i <= k <= j   // 每次挑選乙個最後打爆的氣球可以將問題規模下降

給原問題加上padding可以更方便程式設計。

public int maxcoins(int nums) }}

return dp[1][n];

}

錯誤記錄:

初始化的時候想當然的認為len == 1的時候結果的數值為numspadding[i],導致失敗。

312 戳氣球 動態規劃

難度 困難 2020 7 19每日一題打卡 題目描述 解題思路 今天是抄答案而且還抄的迷迷糊糊的一天 知道要這樣做,但是仔細去想為什麼是這樣的,又說不出個所以然 首先在陣列左右兩端新增虛擬氣球節點,是不能被戳破的,這樣能方便處理邊界,而且保證總是有三個氣球相乘。然後注意動態規劃的順序,要從區間右邊開...

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或 ...