令n個數為x=,設m[j]是以x[j]開頭的乙個最長單調遞增序列,其長度為c[j]
設原問題的所求最優解是:max,顯然,c[j]有下面遞迴式成立:
c[j]=max+1,1}
j=k<=n&&x[j]<=x[k]
注:動態規劃就是要把大事化小,小事化了,我們j從n開始,
c[n]=1 j=n
當jx[k])
c[j]=1
重點:k也要迴圈,這是我作為初學者最為不懂得。
舉個例子:
數列為8的最長長度為:1
6的最長長度為:2
11的最長長度為:1
9的最長長度:2
3的最長長度:3
1的最長長度:4
2的最長長度:4
4 的最長長度:3
顯然時間複雜度為n^2
改進:a 長度為i的候選序列的結尾元素的位置
b 每個元素結尾的單調遞增序列的前乙個元素位置
陣列為m=
此為a陣列的變化方式
顏色表示:每當遍歷乙個數k時,在a中找到i最小且a[i]大於k.則用k在m中的編號替代a[i].q且用b記錄a[i-1]的數(也就是記錄在a陣列中前乙個數的值(值為在m中的序號))
此為b陣列的變化方式
找最長遞增子段,即從a最後確定的一組最後乙個數開始找
即最長為 10-8-7-4-3
演算法學習 動態規劃 求最長子序列
對於母串x y 求lcs與最長公共子串。子串應該比較好理解,至於什麼是子串行,這裡給出乙個例子 有兩個母串 比如序列bo,bg,lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公共子串行。最長公共子串行 longest common subsequence,l...
動態規劃 求最長遞增子串行
題目 給出一段陣列,比如 1,3,5,2,4,6,7,8 得到的最長為1,2,4,6,7,8。思路 利用dp陣列來解決這個問題,dp i 表示0 i之間最長的子串行的長度。dp的求法如果a i a j dp i math.max dp i dp j 1 首先求出dp的 如下 private stat...
動態規劃 求DAG中最長路徑
給定乙個有向無環加權圖,求圖中的最長路徑。該圖中的最長距離為14,即2 4 6 2。首先我們要對有向無環加權圖進行拓撲排序。拓撲排序的意思簡要來說就是將圖中頂點和邊排成乙個線性序列,對於,經拓撲排序後一定滿足vi在vj的前面。拓撲排序的實現方法 首先找出圖中入度為0的點加入拓撲排序後的序列,例子中為...