動態規劃 Edit Distance

2022-08-19 23:48:10 字數 1552 閱讀 4222

大意:給定兩個字串word1和word2,為了使word1變為word2,可以進行增加、刪除、替換字元三種操作,請輸出操作的最少次數

example 1:

input:word1 = "horse", word2 = "ros"output:3explanation:horse -> rorse (replace 'h' with 'r')

rorse -> rose (remove 'r')

rose -> ros (remove 'e')

example 2:

input:word1 = "intention", word2 = "execution"output:5explanation:intention -> inention (remove 't')

inention -> enention (replace 'i' with 'e')

enention -> exention (replace 'n' with 'x')

exention -> exection (replace 'n' with 'c')

exection -> execution (insert 'u')

狀態:dp[i][j]把word1[0..i-1]轉換到word2[0..j-1]的最少操作次數

狀態轉移方程:

(1)如果word1[i-1] == word2[j-1],則令dp[i][j] = dp[i-1][j-1]

(2)如果word1[i-1] != word2[j-1],由於沒有乙個特別有規律的方法來斷定執行何種操作,在增加、刪除、替換三種操作中選一種操作次數少的賦值給dp[i][j];

增加操作:dp[i][j] = dp[i][j-1] + 1

刪除操作:dp[i][j] = dp[i-1][j] + 1

替換操作:dp[i][j] = dp[i-1][j-1] + 1

1

int mindistance(string word1,string

word2);

10for (int i = 0; i <= wlen1; i++)

11 dp[i][0] =i;

12for (int j = 0; j <= wlen2; j++)

13 dp[0][j] =j;

14int temp = 0;15

for (int i = 1; i <= wlen1; i++)23}

24}2526

/*27

for (int i = 0; i <= wlen1; i++)

28deletedp[i];

29deletedp;

30*/

3132

return

dp[wlen1][wlen2];

33 }

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...

mysql動態規劃 動態規劃

動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...

《動態規劃》 ACM 動態規劃例題詳解

描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...