DP入門之《LIS 最長不降子串行》

2021-05-27 12:09:47 字數 689 閱讀 4974

剛學dp沒思路,就去找書看,剛開始了解了記憶化搜尋與遞推,對dp問題漸漸開始有了一些理解,並有了一些自己的想法,對書上描述的狀態轉移方程開始感覺有點意思了。。。

今天又看看了對lis的解決方案的描述,感覺貌似明白了,就試著寫了寫,只寫了20行的**就解決問題了,當然,這段**只能給出最優值,而不能給出最優方案,不過,我想對於我來說,這一步走得不錯了,算是我開始入dp這個門了吧,

順推:

#includeint main()

len=d[0];

for(i=1;ilen)

len=d[i];

printf("%d\n",len);

return 0;

}

陣列d[i]儲存的是以a[i]為結束點的序列長度,採用順推的話,初始化d[0]=1,計算d[i]前都初始化為1;

比如剛開始,只有a[0]乙個元素,所以d[0]=1;

到d[1]時有兩種情況:

1. 若a[0]<=a[1]則存在長度為2的不下降序列a[0],a[1]。

2.若a[0]>a[1]則存在長度為1的不下降序列a[0]或a[1]。

還有就是逆推法,從最後算起,與此類似,不再多說了。。嗯,下一步改進此演算法,改進成可以列印出最優方案。。

早上又睡過了,沒吃早飯跑來了,很餓,現在果斷吃飯去。。。。。

還有,下一步開始揹包問題和初步數論,嗯

最長不降子串行 dp

問題描述 給定乙個字串,求出其不降子串行的最大長度。分析 從後往前逆推 06對於n個數,我們可以分為n 1個階段。07我們由後向前搜尋 逆推法 我們可以這樣思考 081 對a n 來說,由於它是最後乙個數,所以當從a n 開始查詢時,只存在長度為1的不下降序列 092 若從a n 1 開始查詢,則存...

最長不降子串行

原文 這題目是經典的dp題目,也可叫作lis longest increasing subsequence 最長上公升子串行或者 最長不下降子串行。很基礎的題目,有兩種演算法,複雜度分別為o n logn 和o n 2 一 問題描述 設有由n個不相同的整數組成的數列,記為 a 1 a 2 a n 且...

DP 最長不下降子串行 LIS

同類的問題還有 最長上公升子串行 最長下降子串行 他們的不同就在於定義的core規則不同,有的是 有的是 有的是 由此啟發,我們可以在解決其他的問題,不一定是比較數的大小的問題裡面抽象出這種模型.下面介紹這種動態規劃入門都會介紹的問題的思路.首先我們從頭開始分析這個問題.對這個序列中的每乙個數的 有...