高階動態規劃

2021-10-08 20:04:29 字數 1694 閱讀 5594

高階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]

• 如果 word1[i] 與 word2[j] 不同,那麼 dp[i][j] 可以通過

在 dp[i-1][j-1] 的基礎上做 replace 操作達到目的

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