題目大意:
求:由字串 s 通過下列三種操作
插入乙個字元;
刪除乙個字元;
改變乙個字元
變換到字串 t 所需要的最少操作次數(亦即最短編輯距離問題)
解題思路:
定義狀態 \(f[i][j]\) 表示 \(s[0..i]\) 和 \(t[0..j]\) 合併所需的最小花費,則可得狀態轉移方程為(字串座標從 \(1\) 開始,\(0\) 表示乙個都沒選):
實現**如下:
#include #include using namespace std;
const int maxn = 1010;
int n, m, f[maxn][maxn];
char s[maxn], t[maxn];
int main()
}printf("%d\n", f[n][m]);
}return 0;
}
poj 3356 求最短編輯距離
題目大意 給定兩個字串x,y,要你求出x經過插入,刪除,替換變成y所要的最少操作,即編輯距離。當x i y j 時,i和j不需要編輯,要麼刪除,要麼插入,要麼替換 dp i j min dp i 1 j 1 dp i 1 j 1,dp i j 1 1 當x i y i 時,i和j不需要編輯 dp i...
編輯距離 poj 3356
include define n 1002 char src null,des null int m,n int dis n n main int i,j,k while scanf d m eof src char malloc sizeof char m 1 scanf s src scanf ...
最小編輯距離 poj3356
我開始讀題的時候以為弄錯提了。看來讀題還是有待提高 題意是 給定兩個串,乙個a,b,讓a變成b 有兩種操作 1 增加乙個字元 2 減少乙個字元 3 轉換乙個字元 每一次操作算一次運算元,問你最小的運算元 在華南農業大學的acm群裡有人問這道題,後來翻了翻,還是挺有意思的,開始以為是最長公共子串,後來...