有 \(n\) 個物品,編號分別為 \(1\ldots n\)。物品 \(i\) 的重量為 \(w_i\),價值為 \(v_i\)。
給出每個物品依賴於哪個物品。我們用 \(d_i = j\)\((i>j>0)\) 表示:如果要選取物品 \(i\),就必須先選取物品 \(j\)。另外,我們用 \(d_i = 0\)
\((i>0)\) 表示:該物品不依賴於任何物品。
揹包最多能裝載的重量為 \(w\),請問揹包中最多能裝入多大價值的物品。\(o(nw^2)\) 的做法不講了。\(o(nw)\) 的做法是這樣的:先求出一棵樹的後序遍歷序列 \(ed\)(下文簡稱後序序列)。比如左下圖這棵樹,我在右下圖中標出了它每個結點的後序。
如果我們開一張新的圖,然後按照後序序列將結點依次加入圖中,我們會發現,每次加入的結點在當前情況下都是根結點。下圖展示了放入 4, 7, 8, 9 號結點時,新圖的情況。
因此,設 \(\mathrm(i,j)\) 表示將後序序列的前 \(i\) 個結點放入新圖,揹包容量為 \(j\) 時,所能取得的最大價值。設 \(\mathrm_i\) 以 \(i\) 為根的子樹的大小。
綜上可得 \(\mathrm(i,j)=\max(\mathrm(i-1,j-w_i)+v_i,\;\mathrm(i-\mathrm_i,j))\) 。
cf815c,cf581f,cf960e,cf633f,cf1065f,cf538e,cf592d,cf461b,cf1088e,cf533b
[sdoi2017] 蘋果樹
(naipc2018)i - red black tree
vijos 1676, 1723
樹形DP學習筆記
樹形dp就是.我也不知道是什麼,反正乙個主件下面有很多的附件可選就是樹形dp,咕咕咕 樹形dp的主要實現形式是dfs,在dfs中dp,主要的實現形式是dp i j,i是以i為根的子樹,j是表示在以i為根的子樹中選擇j個子節點,0表示這個節點不選,1表示選擇這個節點。有的時候j或0 1這一維可以壓掉 ...
學習筆記 樹形dp
最近幾天學了一下樹形 dp 其實早就學過了 來提高一下開啟樹形 dp 的姿勢。1 沒有上司的晚會 我的人生第一道樹形 dp 其實就是兩種情況 dp i 1 表示第i個人來時的最大人數 dp i 0 表示第i個人不來時的最大人數 然後遞迴至葉子節點,倒推 dp 狀態轉移方程 dp root 1 dp ...
樹形DP學習筆記
1.為什麼會有樹形dp 正常來說,線性dp用來解決序列的問題,但是當我們維護的資料結構發生變化的時候,比如,現在我們需要對一棵樹 進行dp,普通的線性dp邊無法解決了,這個時候,就需要用到樹形dp了 2.樹形dp的應用場景 1中的應用場景給的比較抽象,這裡詳細的來說一下。最經典的例子就是乙個等級森嚴...