P2758 編輯距離(洛谷)

2021-10-10 12:42:05 字數 856 閱讀 4587

傳送門

這道題,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] = dp[i][j - 1] + 1;

三者選擇維護一種最小的值就行。

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

初始話部分:

dp[0][i] = i ;代表新增i個字元的最小操作次數

dp[i][0] = i;代表刪除i個字元的最小操作次數

**部分:

#include

using

namespace std;

const

int n =

2e3+10;

char s1[n]

;char s2[n]

;int dp[n]

[n];

intmain()

for(

int i =

1; i <= m; i++

)for

(int i =

1; i <= n; i++

)else}}

cout << dp[n]

[m]<< endl;

return0;

}

編輯距離(洛谷 P2758 )

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

洛谷 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。輸出格式 只有乙個正整數,...