子串:在給定的字串中選取連續的一段
子串行:可以不連續,但是要保證出現的順序與原字串相同
比如字串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只需改一改題意就變成了,什麼保證什麼什麼情況下,什麼最大,什麼最小的問...