剛學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規則不同,有的是 有的是 有的是 由此啟發,我們可以在解決其他的問題,不一定是比較數的大小的問題裡面抽象出這種模型.下面介紹這種動態規劃入門都會介紹的問題的思路.首先我們從頭開始分析這個問題.對這個序列中的每乙個數的 有...