P2758 編輯距離 簡單DP

2022-05-16 02:11:53 字數 725 閱讀 8595

要把兩個字串變成相同的字串

一共可以利用以下三種操作:

1、把串中任意乙個字元刪去;

2、在串中任意乙個位置插入乙個字元;

3、把串中任意乙個字元變成其他任意字元;

問至少要多少次操作才能讓兩個字串相同?

(狀態:設\(f[i][j]\)為把\(s1[0]-s1[i - 1]\)變為\(s2[0]-s2[j - 1]\)所需要的步數。

對於\(f[i][j]\)若相等,直接轉移;否則有三個轉移:

從\(f[i - 1][j - 1]\) (把\(s1[i - 1]\)變為\(s2[j - 1]\))

從\(f[i - 1][j]\) (刪掉\(s1[i - 1]\))

從\(f[i][j - 1]\)(\(s1\)最後填乙個\(s2[j]\))

其實刪除和新增操作兩個是等價的...刪掉乙個相當於給另乙個字串新增乙個......

#includeusing namespace std;

char a[10000],b[10000];

int dp[10000][10000];

int main()

dp[i][j] = min(dp[i - 1][j - 1],min(dp[i][j - 1],dp[i - 1][j])) + 1;

} cout << dp[n][m];

return 0;

}

P2758 編輯距離 DP

傳送門 思路 經典兩個字串匹配的dpdp dp,找到狀態轉移方程即可。這裡提供兩種寫法,dpdp dp,記憶化搜尋。實質一樣。p s ps ps 記憶化搜尋看著舒服一些。d pdp dp include using namespace std typedef long long ll const i...

P2758 編輯距離 dp

設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元 皆為小寫字母!第一行為字串a 第二行為字串b 字串a和b的長度均小於2000。只有乙個正整數,為最少字元操作次數。輸入 1複製 sfdq...

P2758 編輯距離

p2758 編輯距離 設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元 皆為小寫字母!輸入格式 第一行為字串a 第二行為字串b 字串a和b的長度均小於2000。輸出格式 只有乙個正整數,...