設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種:
1、刪除乙個字元;
2、插入乙個字元;
3、將乙個字元改為另乙個字元;
!皆為小寫字母!
輸入格式:
第一行為字串a;第二行為字串b;字串a和b的長度均小於2000。
輸出格式:
只有乙個正整數,為最少字元操作次數。
輸入樣例#1:
sfdqxbw輸出樣例#1:gfdgw
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 個機械人工廠是由一段馬路連線在一起的。小新將連...