一些dp技巧

纔不告訴你這些學校沒講呢!
都是些算法的簡單思想簡單總結,大佬勿入(嗯,dp開始涉及幾何了)

數位dp:

有的題要求的是一個數中的數字的排列的方式的種數,而並非與數本身有關係。它常常會給你一個區間[l,r] 詢問其中有多少個滿足題意的數字,這時就要用數位dp。它是一種記憶化搜索,它的狀態常常是f[i] 前i位滿足題意的數字個數。同時要注意控制上界。答案就是ans(r)-ans(l-1)。

習題

基礎:HDU 2089 HDU 4734 POJ 3252 HDU 4507
水水水題:HDU 3709 UVA 1305 Hbzoj 1799

相關大佬博客鏈接

斜率優化:

通常有這樣的問題:f[i]=min(f[j])+a[i],j 有限制條件。本來這樣的題是O(n2) 複雜度,但是使用優先隊列就可以降爲O(n) 了。
但是這樣的方程呢:f[i]=min(f[j]+(a[i]a[j])2) 哦豁優先隊列不得行了。
斜率優化是優先隊列的優化。
設我們選擇jk 時優,即有:f[j]+(a[i]a[j])2<f[k]+(a[i]a[k])2
變形,得:((f[j]+a[j])(f[k]+a[k]))/(a[j]a[k])<2a[i] ,此處注ai 要單增。
令兩個點j(a[j],f[j]+a[j]) ,k(a[k],f[k]+a[k]) 顯然不等式左邊的幾何意義爲點j 與點k 的斜率,而j優於k的條件爲斜率小於2a[i] ,即斜率越小越好。
然後再用優先隊列維護一個點集,隊列中相鄰兩點的斜率單增(斜率越小越好),然後每次根據上面的不等式維護隊首即可。時間複雜度這時被降爲了O(n)

習題

懶得打鏈接的博豬推薦:
[hdu3507] 打印文章(引例)
[HNOI2008] 玩具裝箱
[CEOI2004] 鋸木廠選址
[ZJOI2007] 倉庫建設
[USACO 2008 March Gold] 土地購買
[APIO2010] 特別行動隊
[APIO2014] 序列分割
[bzoj3437] 小P的牧場
[SDOI2016] 征途

相關大佬博客鏈接

決策單調性優化:

沒看懂,以後再更。四邊形不等式撒子鬼玄學嘛!!!!反正用個結論,然後降複雜度呀!

習題不會做呀

BZOJ1563: [NOI2009]詩人小G
BZOJ5311: 貞魚
相關大佬博客鏈接

CDQ分治優化:

CDQ分治本身思想是:把一個求解的區間[l,r] 分爲[l,mid][mid+1,r] 兩個區間求解,然後在合併答案時考慮他們對答案多餘的貢獻,進而求解出[l,r] 的答案。
dp中的優化大概是區間dp的優化吧:大概可以把O(n2) 降爲O(nlog2n) 沒看到例題呢。

習題:

bzoj 2253: [2010 Beijing wc]紙箱堆疊
bzoj1492

Orz—-終於寫完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章