編輯距離(動規例題)

2021-07-11 07:01:57 字數 809 閱讀 1634

題目描述:

現有字串a,b,要使得a=b,有如下三

種操作:

將a刪除1個字元;

將a插入1個字元;

將a中的乙個字元改為另乙個字元;

樣例輸入:

sfdqxbw

gfdgw

樣例輸出: 4

解釋:

sfdqxbw->gfdqxbw->gfdxbw->gfdbw->gfdgw,四步。

這道題因為只能操作a,就能有效避免動態規劃的無後效性,就是a的操作並不會影響接下來的操作,但如果可以操作b則就會影響a的操作了。

我們可以按i,j的長度來劃分階段,狀態只要稍微想一想都知道是設f[i,j]表達a

1..i

~b1..j

的最優編輯距離。

同樣這道題的邊界也極為重要,f[0,i]以及f[i,0]的值都為i(1<=i<=lena,lenb)

那方程又是什麼呢?

其實,操作的三種情況都對應了三個不同的決策——

當i,j不相同時,有如下三種操作

第一種操作:f[i-1,j]+1

第二種操作:f[i,j-1]+1

第三種操作:f[i-1,j-1]+1

而當相同時則f[i,j]直接等於f[i-1,j-1]。

**:var

i,j,k,m,n:longint;

s1,s2:ansistring;

f:array[0..2000,0..2000] of longint;

function min(x,y:longint):longint;

begin

if x

低價購買(動規例題)

求乙個最長不下降子串行,以及這個最長不下降子串行在這個序列裡的個數 不能重複 對於第一問我們就只要普通的dp一下就行了,以下將最長不下降子串行稱為最長序列 對於第二問這裡要詳細的講一下。狀態有如下 f i 表示到第i個數的最長序列 b i 表示到第i個數的最長序列的個數 很容易得出方程 f i ma...

初學動規 例題 滑雪

本人是根據mooc大學郭煒老師得程式設計與演算法進行的個人總結 一般思路 1 把原問題轉化為若干的子問題,子問題和原問題形式相同或類似,只是規模變小了。子問題的解一旦求出 就把他儲存下來,如果再遇到就可以直接使用無需再進行計算。3 確定初始狀態 邊界狀態 的值 4 狀態轉移方程。從乙個或多個值已知狀...

方格取數(動規例題)

對於n n的乙個矩陣中有著許多數字,規定你從左上角出發,走到右下角,走兩遍,每一次走時可以取矩陣中的數字,求如何取得最大的和。這道題可以四重迴圈列舉兩條路所走到的位置。然後判斷i,j點,h,k點是由上或左得來最大值,sum i,j,h,k 表示第一條道路走到i,j點,第二條走到h,k點時的最優值,顯...