動態規劃學習 最短編輯距離

2021-10-10 06:20:24 字數 753 閱讀 5109

傳送門

(有需要可以支援一下yxc大佬的課程)

題意:對a串進行增刪改操作變成b串

思路(閆式dp nb!):

狀態定義類似於lcs

dp[i][j]表示a[1-i]匹配b[1-j]的運算元(屬性:最小值)

對於增操作,對於ai後需要增加乙個字母匹配bj,那麼即需要增加的值肯定為bj,此時上乙個狀態就是dp[i][j-1],轉移dp[i][j-1]+1。

對於刪操作,需要刪除ai才可匹配bj,所以上乙個狀態為dp[i-1][j]。轉移dp[i-1][j]+1。

對於改操作,對於ai需要改變才能匹配bj,所以上乙個狀態為dp[i-1][j-1]。當然也存在不用改的情況所以轉移為dp[i-1][j-1]+(a[i]!=b[j])。

最後需要考慮邊界的初始化,當a0匹配bj時,需要做的只有增操作,當ai匹配b0時,需要做的只有刪操作。

**如下:

#include

using

namespace std;

const

int n=

1010

,inf=

0x3f3f3f3f

;char a[n]

,b[n]

;int dp[n]

[n];

int la,lb;

intmain()

cout<[lb]

}

動態規劃 編輯距離

1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...

動態規劃 編輯距離

給定兩個序列x和y,求從乙個序列到另乙個序列所需變換的最小次數,這裡的變換包括刪除,新增和替換,每次只對乙個元素進行操作。演算法序言 這個題目有點像之前寫的最長公共子串行問題,也是用動態規劃的演算法。能夠應用動態規劃的題目有乙個特點就是具有最優子結構,就是整個問題的最優解會包含子問題的最優解,那麼我...

動態規劃 編輯距離

將乙個字串變為另乙個字串最小操作次數,您對單詞允許以下3種操作 a 插入字元 b 刪除字元 c 替換字元 例如 a horse 變成 b ros 想法 coding utf 8 def char array replace array1,array2 row len array1 col len a...