動歸 編輯距離

2021-09-30 13:41:48 字數 1011 閱讀 8188

設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的初始值,若b為空,a要刪l1個,f[i][0]=i;b的初始值,若a為空,b要刪l2個,f[0][i]=i;

操作:1、刪除乙個字元a[i]:f[i-1][j]+1

2、a[i]後插入b[j-1]:f[i][j-1]+1

3、將乙個字元改為另乙個字元a[i]改為b[i]:f[i-1][j-1]+1

**:

#include

using namespace std;

//f[i][j]為a中前i個與b中前j個

int main()

,l1,l2;

cin>>a>>b;

l1=strlen(a);

l2=strlen(b);

for(int i=1;i<=l1;i++)

f[i][0]=i;//a的初始值,若b為空,a要刪l1個

for(int j=1;j<=l2;j++)

f[0][j]=j; //b的初始值,若a為空,b要刪l1個

for(int i=1;i<=l1;i++)

for(int j=1;j<=l2;j++)

cout<

編輯距離(動規例題)

題目描述 現有字串a,b,要使得a b,有如下三 種操作 將a刪除1個字元 將a插入1個字元 將a中的乙個字元改為另乙個字元 樣例輸入 sfdqxbw gfdgw 樣例輸出 4 解釋 sfdqxbw gfdqxbw gfdxbw gfdbw gfdgw,四步。這道題因為只能操作a,就能有效避免動態規...

整數劃分(動歸)

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數量mod 10 9 7。sample input6sample output4 include incl...

動歸 道路遊戲

題目描述 小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這n 個機械人工廠編號為1 n,因為馬路是環形的,所以第n 個機械人工廠和第1 個機械人工廠是由一段馬路連線在一起的。小新將連...