動態規劃經典問題

2021-08-05 23:50:32 字數 2368 閱讀 4075

子串:在給定的字串中選取連續的一段

子串行:可以不連續,但是要保證出現的順序與原字串相同

比如字串abcdefg

abc既是子串又是子串行

acd只是子串行

一、最大連續子串行和

給定乙個整數序列a1,a2……an。求最大的連續的子串行的和。

比如的最大連續子串行的和為5(3+1-1+2)

萬能列舉???每次列舉l和r,求區間[l,r]的和

時間複雜度o(n^3)。

1.定義狀態:

dp[i]表示以ai為結尾的連續子串行的最大和

2.狀態轉移:

if(dp[i-1]>0) dp[i]=dp[i-1]+a[i];

else dp[i]=a[i];

二、最長遞增子串行(lis)

給出長度為n的陣列,找出這個陣列的最長遞增子串行的長度。

(遞增子串行是指,子串行的元素是遞增的)

例如:5 1 6 8 2 4 5 10,最長遞增子串行是1 2 4 5 10。

1.定義狀態:

dp[i]表示以ai為結尾的最長遞增子串行的長度。

i= 1時, dp[1] = 1

i= 2時, dp[2] = 1

i= 3時,, dp[3] = 2

i= 4時,,,,,, dp[4]= 3

i= 5時 ………

2.狀態轉移:

dp[i]=max (j < i && a[j] < a[i])

ans = max

for (int i = 1;i <= n;i++) 

j--;

}ans = max(dp[i],ans);

} ologn法:

1.定義狀態:

d[k]表示長度為j的最長遞增子串行最後一項的最小值。

性質:1. d[k]在計算過程中單調不公升;

2. d陣列是有序的,d[1]2]<..d[n]。

解法:

1. 設當前最長遞增子串行為len,考慮元素a[i];

2. 若d[len]len++,並將d[len]=a[i];

否則,在d[0-len]中二分查詢,找到第乙個比它小的元素d[k],並d[k+1]=a[i].()

三、最長公共子串行(lcs)

給定兩個序列求他們最長相同的子串行的長度。

例如:a= b=的最長公共子串行為,長度為4

1.定義子狀態:

dp[i][j]表示a序列前i項和b序列前j項的最長公共子串行的長度

2.狀態轉移:

(1)a[i] = b[j]時,dp[i][j] = dp[i-1][j-1]+1

比如a[2]=b[3]= b,

lcs(1,2) =

lcs(2,3) =

(2)a[i] != b[j]時,dp[i][j] = max
假設lcs(i,j)的最後一位是t;

t != a[i]時,dp[i][j] = dp[i-1][j];

t != b[i]時,dp[i][j] = dp[i][j-1];

dp[i][j] = max

for(int i = 0;i

<= lena;i++) dp[i]

[0] = 0;

for(int i = 0;i

<= lenb;i++) dp[0]

[i] = 0;

for(int i= 1;i

<= lena;i++)

else

}}

四、最長公共子串

給定兩個序列求他們最長公共子串的長度。

例如:a= b=的最長公共子串行為,長度為4

1.定義子狀態:

dp[i][j]表示以a序列第i項和b序列第j項為結尾的最長公共子串的長度

2.狀態轉移:

a[i] = b[i]時,dp[i][j] = dp[i-1][j-1] + 1;

a[i] != b[i]時,dp[i][j] = 0;

for(int i = 0;i

<= lena;i++) dp[i]

[0] = 0;

for(int i = 0;i

<= lenb;i++) dp[0]

[i] = 0;

for(int i= 1;i

<= lena;i++)

else

}ans = max(ans,dp[i]

[j]);

}

動態規劃經典問題

from 實現在 維基百科對動態規劃的定義 動態規劃 英語 dynamic programming,簡稱dp 是一種在數學 電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題 1 和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於...

動態規劃 經典問題

今天記錄下自己所學的動態規劃知識點 有三枚硬幣 2,5,7 拼成27元 最少需要幾枚硬幣 我自己理解的動態規劃實操兩部曲 第一曲 定義初始條件 第二曲 迴圈操作 以及狀態方程定義 我的第乙個動態規劃程式 題目資訊 有三枚硬幣 2,5,7 拼成27元 最少需要幾枚硬幣 看到最少 一般用動態規劃求解 1...

動態規劃經典問題

只是談談看題感悟而已,並沒有寫題,則跟不用說刷題了。在看了演算法競賽入門經典,也就是劉汝佳寫的那本 一 中動態規劃專題,理會甚多。動態規劃問題,一般可以看為dag問題的,有許多類動態規劃原來儲存的是bool 的true或false只需改一改題意就變成了,什麼保證什麼什麼情況下,什麼最大,什麼最小的問...