這一章,我們來學習樹形動態規劃。
動態規劃一般來說分為四大類:線性動態規劃,區間動態規劃,樹形動態規劃和特殊種類動態規劃。
因為線性模型和區間類模型緊密相關,所以一般我們將這兩種型別放在一起學習。
樹形動態規劃和以上兩種不同,它是在乙個樹結構中進行的,因此具有一般性,
而特殊種類動態規劃則包含比較廣,譬如狀態壓縮,
博弈以及其他各種問題都可以歸納到這個部分,因為問題比較分散,
所以這個部分就請大家自己學習,可以參考歷年國家集訓隊**,
對這個部分的討論十分透徹和深入。
下面就讓我們來學習樹形動態規劃。
首先看一道例題:
例:給定一棵樹t,樹中每個頂點u都有乙個權w(u),權可以是負數。
現在要找到樹t的乙個個連通子圖使該子圖的權之和最大。
分析一下這道題,我們發現,對於節點a,如果考慮以他為根的一棵子樹,
那麼它的最優值和他的父節點無關,所以轉移方程為:
f[i]=sigma+w(u)
最終的答案為f[x]中的最大值。
因為是在一棵樹當中進行動態規劃,所以不妨用遞迴的形式來編寫。
通過上面的例子,相信大家對樹形動態規劃有了乙個初步的認識,
其實樹形動態規劃屬於動態規劃中乙個較難的問題,因為約束條件往往比較多,
所以狀態的轉移並不容易,下面看乙個較難的例子:
在一棵樹中,每條邊都有乙個長度值,現要求在樹中選擇3個點x、y、z,
滿足x到y的距離不大於x到z的距離,且x到y的距離與y到z的距離之和最大,求這個最大值。
其中頂點個數n<=2000000
因為資料規模很大,所以考慮o(n)或者o(nlogn)的演算法。
分析問題,我們發現因為在一棵樹中,所以x,y,z的路徑中必定有乙個交點k,
距離s=xk+2*ky+kz,我們發現,若要s達到最大值,
那麼只需要ky,xk,kz為以k為根的樹中三個不在同一子樹中的最大的三個距離就可以了,
但是這樣的時間複雜度依然為o(n^2),繼續分析發現,
實際上第一次求出以某個節點為根的距離後,
只需要以這個點為根再dfs遍歷一遍就可以求出其他的節點距離,所以總的時間複雜度為o(n)。
再次回味一下這道題的解題思路:我們首先從資料規模確定了演算法的複雜度,
並通過對模型的初步分析得到了一些性質,然後通過這些性質得到了新的解題思路,
這其實是解樹形動態規劃乃至其他問題的乙個一般性的思路。
通過對樹模型的特殊性分析,可以大大的降低時間複雜度。
最後讓我們來看乙個很具有發散性的題目:
奶牛成群、土地眾多的fj有乙個地形狹長的農場,農場被分成了n塊土地,n不超過1000。
這些土地位於一條直線上,並從左到右編號為1至n。每塊土地的面積都相同,
但是高度不一定相同。每塊土地都擁有乙個海拔高度值,這個值不超過1000000。
如果一段相同高度土地的兩邊都比它低或者是農場的邊界,那麼這段土地將被稱之為「山頂」。
fj希望通過搬走泥土來降低某些土地的海拔高度,使「山頂」的數目不超過k,其中1≤k≤25。
在這一前提下,fj希望搬運的泥土體積最小,也就是所有的土地減少的高度和最小。
初看上去這道題似乎和樹形動態規劃沒有什麼關係,根本沒有樹結構的樣子,
分析一下我們發現,所謂的山峰,就是每個層中不連線的部分,所以從層的角度思考,
顯然,每個層之與他的上層和他的下層的有關,與層的長度無關,所以不訪化層為點,
以地面為基礎節點,每一層不連線「塊」為乙個節點,用邊連線不同層的相鄰的點,
我們驚訝的發現,這些點構成了一棵樹!
進一步分析,發現每次「削平」乙個山頂,在樹中就是刪除乙個最葉子節點,
而消除的高度則可以看作是節點的權值,這樣,問題就轉化到了在樹中刪除一些節點,
使最終的節點數目不超過k+1,並且剩餘權值最大的問題,複雜度為o(nk^2)。
多麼巧妙的轉化!一道看似複雜的問題就這樣解決了,以無限為有限,以無法為有法,這或許就是演算法的魅力。
<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>
推薦題目:
1.樹的最大連通分支問題
2.愛心蝸牛
3.皇后萬歲
4.有線電視網
5.貪吃九頭鳥
6.尋寶
7.網路收費(noi2006)
第三章 規劃
問答 1.安裝規劃 1.ubuntu適合台式電腦使用,x window整合得比較好 2.redhat 和suse適合企業使用,系統服務整合得比較好 3.linux需要先確定好硬體應該使用那個i o埠或是irq分配 2.硬碟分割槽規劃 最簡單的是分兩個區 和 swap 相當於windows的虛擬記憶體...
第三章 Models詳解
摘自 萬丈高樓平地起,先理解概念才能更好的使用。資料是由model提供的,但不是指區域性變數 全域性變數或常數這樣的資料,而是指程式外部所提供的資料。外部資料,包含資料庫 檔案 web service等,都是可以算是model。按asp.net mvc的分類方法 domainmodel viewmo...
tcp ip詳解 筆記 第三章
ip協議是tcp ip協議簇中最為核心的協議。所有的tcp udp icmp igmp資料都以ip資料報格式傳輸。而ip協議是不可靠的,因為ip僅提供最好的傳輸服務,也就是以最快速度 資料報,而資料報能不能到達終點,能不能按照傳送的順序到達終點都是不能保證的。圖為ip資料報格式及首部中的各欄位 本章...