P2758 編輯距離 dp

2022-05-18 05:26:53 字數 1286 閱讀 3341

設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種:

1、刪除乙個字元;

2、插入乙個字元;

3、將乙個字元改為另乙個字元;

!皆為小寫字母!

第一行為字串a;第二行為字串b;字串a和b的長度均小於2000。

只有乙個正整數,為最少字元操作次數。

輸入 #1複製

sfdqxbw

gfdgw

輸出 #1複製

4

題解:

用f[i][j]表示a串中前i個字母和b串中前j個字母的最小運算元

有變和不變兩種情況

不變:a[i] = b[j]時,f[i][j] = f[i - 1][j - 1];

變:增加:f[i][j] = f[i][j - 1] + 1

減少:f[i][j] = f[i - 1][j] + 1

改變:f[i][j] = f[i - 1][j - 1] + 1

code

1 #include 2

#define dbug(x) cout << #x << "=" << x << endl

3#define eps 1e-8

4#define pi acos(-1.0)56

using

namespace

std;

7 typedef long

long

ll;8

9const

int inf = 0x3f3f3f3f;10

11 templateinline void read(t &res)

1217

18const

int maxn = 2e5 + 7;19

20string

a, b;

21int f[2007][2007

];22

23int

main()

2432

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

35for ( int i = 1; i <= lena; ++i )

40else43}

44}45 cout << f[lena][lenb] <

46return0;

47 }

view code

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

要把兩個字串變成相同的字串 一共可以利用以下三種操作 1 把串中任意乙個字元刪去 2 在串中任意乙個位置插入乙個字元 3 把串中任意乙個字元變成其他任意字元 問至少要多少次操作才能讓兩個字串相同?狀態 設 f i j 為把 s1 0 s1 i 1 變為 s2 0 s2 j 1 所需要的步數。對於 f...

P2758 編輯距離

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