2018-10-03 19:29:43
問題描述:
問題求解:
很有意思的題目,首先想到的是暴力遍歷解空間,當然也用到了memo,可惜還是tle,因為時間複雜度確實有點過高了,應該是o(n!)。
mapmap = new hashmap<>();本題給出了資料規模,基本已經提示了時間複雜度為o(n^3)左右比較合適。下面給出本題的標準解法,使用的是動態規劃演算法。public int maxcoins(int nums)
private int helper(linkedlistlist)
map.put(list, res);
return res;
}
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或 ...