編輯距離(洛谷 P2758 )

2021-09-12 10:28:00 字數 1056 閱讀 6532

洛谷 p2758 編輯距離

題目描述

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

1、刪除乙個字元;

2、插入乙個字元;

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

!皆為小寫字母!

輸入輸出格式

輸入格式:

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

輸出格式:

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

明顯的動歸題嘛因為明顯不好暴力和搜尋

f[i][j]表示把a[1~i]變成b[1~j]最少的運算元

假設之前的都已經算好了

考慮一下怎麼進行轉移 根據接下來的操作分類

一頓ctrl c + v之後

狀態轉移方程橫空出世!!!

if(a[i-1]==b[j-1])

f[i][j]=f[i-1][j-1];

else

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

這就出現了乙個問題:

f[i-1][j-1]一定比f[i-1][j-1]+1f[i-1][j]+1小嗎

答案是肯定的

因為需要編輯的字串越長,操作次數只增不減

因此f[i-1][j-1]至少是小於等於f[i-1][j-1]+1f[i-1][j]+1

好的上**

#include #include using namespace std;

#define n 2005

int f[n][n];

int main()

//cout<}

cout

}

P2758 編輯距離(洛谷)

傳送門 這道題,dp問題 用dp i j 表示a中的前i個字元與b中的前j個字元轉化的最少次數。那麼當a i b j 時 dp i j dp i 1 j 1 其餘情況,要麼替換要麼刪除要麼新增。替換 dp i j dp i 1 j 1 1 刪除 dp i j dp i 1 j 1 新增 dp i j...

洛谷 P2758 編輯距離

p2758 編輯距離 一道典型的線性 dp題。像這種線性動態規劃,一種常見的狀態定義方法是 用 f i 表示前 i 個元素滿足要求 只考慮前 i 個元素 時的最佳答案。因此我們很自然地想到用 f i,j 表示將 a 1.i 轉換為 b 1.j 所需的最少操作次數,f n,m 就是問題的答案 n,m ...

P2758 編輯距離

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