hunnu10271 編輯距離問題(dp)

2021-08-02 05:55:51 字數 1491 閱讀 4235

編輯距離問題

time limit:1000ms,special time limit:2500ms,memory limit:32768kb

total submit users:21,accepted users:18

problem 10271 :no special judgement

problem description

設a 和b 是2 個字串。要用最少的字元操作將字串a 轉換為字串b。這裡所說的 字元操作包括 (1)刪除乙個字元; (2)插入乙個字元; (3)將乙個字元改為另乙個字元。 將字串a變換為字串b 所用的最少字元運算元稱為字串a到b 的編輯距離,記為 d(a,b)。試設計乙個有效演算法,對任給的2 個字串a和b,計算出它們的編輯距離d(a,b)。

input

輸入的第一行是字串a,檔案的第二行是字串b。

output

程式執行結束時,將編輯距離d(a,b)輸出。

sample input

fxpimu

xwrs

sample output

5
解題思路:動態規劃

d[i][j],i為a字串的當前長度,j為b字串的當前長度

i=0,d[i][j]=j

j=0,d[i][j]=i

i>0,j>0,d[i][j]=min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+d) a[i]=b[j]時d=0,否則d=1

吐槽一下:a,b字串長度也不給出來,為啥開的10000*10000的陣列都沒爆記憶體

#include #include #include #include #include #include #include #include #include #include using namespace std;  

typedef long long ll;

const int n = 10007;

const int m = 100000000;

const int inf = 0x3fffffff;

const int mod = 1e9+7;

const double pi = acos(-1.0);

const double sm = 1e-9;

int dp[n][n];

int main()

} printf("%d\n",dp[b.length()][a.length()]);

} return 0;

}

編輯距離問題

問題描述 設a和b是2個字串。要用最少的字元操作將字元a轉化為字元b。字元操作包括 1 刪除乙個人字元。2 插入乙個字元。3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到b 的編輯距離,記為d a,b 設計乙個演算法,對給定的任意兩個字串a和b計算出他們的編輯距離d...

編輯距離問題

編輯距離問題 給定兩個字串s和t,對於t我們允許三種操作 1 在任意位置新增任意字元 2 刪除存在的任意字元 3 修改任意字元 問最少操作多少次可以把字串t變成s?例如 s abcf t dbfg 那麼我們可以 1 把d改為a 2 刪掉g 3 加入c 所以答案是3。輸入 第1行 字串a a的長度 1...

編輯距離問題

給定兩個字串s和t,對於t我們允許三種操作 1 在任意位置新增任意字元 2 刪除存在的任意字元 3 修改任意字元 問最少操作多少次可以把字串t變成s?例如 s abcf t dbfg 那麼我們可以 1 把d改為a 2 刪掉g 3 加入c 所以答案是3。輸入 第1行 字串a a的長度 1000 第2行...