動態規划訓練


好久沒做DP今天才發現窩dp水平原來這么渣。。

可能是因為以前抄題解抄多了

找了一堆NOIP范圍之內的DP題,不包括各種很吊的DP優化

盡量多思考不抄題解,稍微鍛煉一下dp思維好了。。

寫一下一句話題解

如果有時間的話盡量寫一下做dp題的總結

 

動規與遞推

bzoj 1721

直接枚舉點計算斜率即可,從一個點出發要想能到另一個點,中間不能有斜率比他大的直線,按這個限制直接枚舉即可
bzoj 1587

我的第一道前綴和優化$dp$,並不難想
bzoj 2017

神dp,設$f[i][j]$表示還剩$i$個硬幣上個人取了$j$個硬幣的最大收益,從后往前遞推即可(需要復習)

bzoj 3208

SB記搜,一共四張操作,而最費時間的三種操作總和不超過100。。
bzoj 2815

並不是$dp$。。不過挺好的一道題,拓撲+LCA
bzoj 3791

好騷的$dp$。首先如果說每個點只會被染一次色的話,我們是不是可以很輕松的推出$dp$轉移式?事實上,發動$k$次技能,最多把序列分成$k*2-1$段,每段我們要數目較多的那種顏色,這樣就可以轉移了(需要復習)

bzoj 3174

難點在排序上,$dp$很好想,設$f[i][j]$前$i$個人表示走了$j$個的最大剩余高度,枚舉當前矮人是否逃離即可。排序是按照身高+臂長排序的,這里我說一下我的理解:如果都出不去或都能出去就沒必要再討論了。我們應該選擇逃生能力強的放在后邊,然后$dp$枚舉每個人選還是不選。

bzoj 3769

不會做,抄的題解,還被卡常。設$f[i][j]$表示放$i$個節點深度小於等於$j$的個數,然后我們會有這么一個想法:已知兩棵樹,如何拼成一棵新的樹?我們可以加一個頂點,讓兩棵樹分別為左右子樹,而深度剛好在原先的基礎上加1。所以枚舉最大深度小於等於$j-1$的兩棵樹去更新最大深度小於等於$j$的兩棵樹即可(需要復習)

bzoj 2091

神$dp$,抄題解還要想半天的那種。。首先我們要排序,這個好理解,因為顯然你在那傻不拉幾的取小的讓別人把大的都拿走了顯然是不優的。然后問題可以轉化成這樣:兩個人輪流取數,如果一個數被取走了那么比它更大的數就不能再取了。

然后我們倒着考慮一下,如果A選到$i$停止,那么B從$i+1$處開始選。但是我們要考慮一個問題,因為是倒着考慮的真實的情況下B會比A先選,也就是說B也可以選擇取走A的那一份,設當前A能取得最大值是$maxn$,那么B當然可以取到$max(maxn,val[i+1]-maxn)$

最后找到的就是第一個人能取到的最大值(需要復習)

bzoj 1226

惡心的狀壓,寫起來讓人很難受。難在設計狀態,以及轉移時細節神煩。令$f[i][j][k]$表示前$i-1$個人全部吃完后$B_i$人的狀態是$j$,最后一個吃飯的人是$i+k$。

bzoj 3696

巨大的樹形dp的暴力,看上去完全過不了的復雜度也A了。。

noip2017逛公園

看到$k$小於等於50,是不是該考慮把他壓進狀態。。

 

樹形動規

bzoj 1040

基環樹上dp。環上相鄰兩點矛盾,所以在環上相鄰兩個點都做一遍樹形dp即可,強制其中一點不能選擇

bzoj 1131

換根法的簡單運用

bzoj 1596

樹上管理類問題,貪心即可

bzoj 1827

換根發的應用,比1131稍微簡單一點點

noip2014 聯合權值

以前只會枚舉的$70$分,現在一看竟然秒了,突然感覺學了一年還真有一點點進步的。。其實只要考慮孫子對當前點的貢獻和兒子之間的相互貢獻就行了,還是蠻套路的事情

 

狀態壓縮

bzoj 1688
bzoj 1231
bzoj 3312
bzoj 2073

把每種合法狀態(不超重)的時間預處理出來,就可以直接跑一個背包了
luogu 3888
noip2017 寶藏

 

概率期望(不過應該考不了特別難的題)

換教室
bzoj 1415
bzoj 2818
bzoj 4008

 

數位DP與計數類DP

應該算思維難度最大的兩類dp了吧。。昨天打CF一道數位dp差點沒搞出來慌得一批,dp水平弱成狗。數位dp和計數類dp都要稍微練一下

不過好在數位dp有一種不錯的dfs的寫法可以套用

bzoj 1026

Dfs一下好像數位dp都是模板。。

bzoj 1833

bzoj 1799

計數類dp這個大佬放的幾道題都很棒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM