日常吐槽:關於dp,有一種莫名的恐懼...maybe源於與mtw大佬與quantum11大佬,初中時抬老師爬樓梯的經歷。。。
言歸正傳:
【題目描述】
設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種:
1、刪除乙個字元;
2、插入乙個字元;
3、將乙個字元改為另乙個字元。
對任意的兩個字串a和b,計算出將字串a變換為字串b所用的最少字元操作次數。
【輸入】
第一行為字串a;第二行為字串b;字串a和b的長度均小於2000。
【輸出】
只有乙個正整數,為最少字元操作次數。
【輸入樣例】
sfdqxbw
gfdgw
【輸出樣例】
4比較基礎的一道dp題目,(我才不會告訴你們,我也是看了書才會做)~
既然是dp,那麼我們分析一下子問題,當前處理a到第i個字元,處理b到第j個字元
狀態f[i][j]代表此時最小的編輯距離
不難推出:
f[i][j]=min+1;
的樣子額...
如果a[i]==b[i]的話,我們發現
then:
if(a[i]==b[j])
f[i][j]=min(min(f[i-1][j]+1,f[i][j-1]+1),f[i-1][j-1]);
else
f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
接下來
假設a空:則 for(int j=0;j<=m;j++) f[0][j]=j;
假設b空:則 for(int i=0;i<=n;i++) f[i][0]=i;
才怪呢...
附上**
#include#include#include#include#includeusing namespace std;
inline int read()
while(isdigit(chr))
return ans*f;
}int f[2005][2005];
int n,m;
char a[2005],b[2005];
int main()
cout
}
編輯距離 (dp)
編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sit...
DP 編輯距離
2019 02 27 題目及 更新 設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。對任意的兩個字串a和b,計算出將字串a變換為字串b所用的最少字元操作次數。第一行為字串a 第二行為字...
編輯距離 DP
設a aa和b bb是兩個字串。我們要用最少的代價 或者字元操作次數 將字串a aa轉換為字串b bb。字元操作有三種 1.插入乙個字元,所需代價為x xx2.刪除乙個字元,所需代價為y yy3.將乙個字元改為另乙個字元,即替換,所需代價為z zz輸入abab ab兩個字串,輸出代價 刪除 可以看做...