高階dp為什麼複雜,
第一:狀態定義
第二:狀態轉移方程
它的複雜度**於什麼地方
1 狀態擁有更多維度(二維,三維,或者更多,甚至需要壓縮(比如斐波那契只需要兩個變數))每個維度是什麼,邏輯清晰
2 狀態轉移方程
編輯距離
給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 。優化點:你可以對乙個單詞進行如下三種操作:
插入乙個字元
刪除乙個字元
替換乙個字元
示例 1:
輸入:word1 = 「horse」, word2 = 「ros」
輸出:3
解釋:horse -> rorse (將 『h』 替換為 『r』)
rorse -> rose (刪除 『r』)
rose -> ros (刪除 『e』)
示例 2:
輸入:word1 = 「intention」, word2 = 「execution」
輸出:5
解釋:intention -> inention (刪除 『t』)
inention -> enention (將 『i』 替換為 『e』)
enention -> exention (將 『n』 替換為 『x』)
exention -> exection (將 『n』 替換為 『c』)
exection -> execution (插入 『u』)
首先這兩個單詞它的長度假設為m和n的話,長度更長的單詞只可能長度減少
長度少的單詞只可能長度增加,也就是最後詞的長度變化範圍在m和n直接,長度向中間逼近
dp方程,
定義dp[i][j] 第一維i表示第乙個字串匹配的長度,第二維j表示第二個字串匹配的長度即word1.substr(0, i), word2.substr(0, j)之間的編輯距離
如果 word1[i] 與 word2[j] 相同,顯然 dp[i][j]=dp[i-1][j-1]在 dp[i-1][j-1] 的基礎上做 replace 操作達到目的• 如果 word1[i] 與 word2[j] 不同,那麼 dp[i][j] 可以通過
在 dp[i-1][j] 的基礎上做 insert 操作達到目的
在 dp[i][j-1] 的基礎上做 delete 操作達到目的
取三者最小情況即可
爬樓梯
小白高階之動態規劃 鋼條切割
關於動態規劃演算法,首先是 什麼樣子的問題適合用動態規劃演算法來解呢?適合用動態規劃演算法解的問題應具有兩個性質 最優子結構性質和具有重複子問題 最優子結構性質是指 若乙個問題的最優解包含其子問題的最優解,則此問題具有最優子結構性質。具有重複子問題性質是指 問題的遞迴演算法會反覆求解相同的子問題。然...
動態規劃 上樓梯高階版
d 上樓梯 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 128kb 描述 小s在玩乙個叫上樓梯的遊戲。樓梯一共有n層台階。因為腿長的限制,小s每次最多只能上k層台階。小s是乙個迷信的人,所以他不希望自己某一步走的步數的數字裡有 4 比如4,14,44都含有數字 4 現在,小s想要知...
教你徹底學會動態規劃 高階篇
話不多說,來看如下例題,也是在動態規劃裡面遇到過的最頻繁的乙個題,本題依然來自於北大poj 最長公共子串行 poj1458 給出兩個字串,求出這樣的乙個最長的公共子串行的長度 子串行中的每個字元都能在兩個原串中找到,而且每個字元的先後順序和原串中的先後順序一致。sample input abcfbc...