解題報告-論對“依賴揹包”的新理解

KarmaticEnding發表於2024-12-07

解題報告-論對“依賴揹包”的新理解

依賴揹包的依賴關係組成一棵樹。那麼為什麼不能按照樹形 \(\text{DP}\) 的方式來思考它呢?

這是個模板題。既然我們說了按照樹形 \(\text{DP}\) 的方式思考它,就要打破常規的 \(\text{DP}\) 思維。

樹形 \(\text{DP}\) 的特點之一就是考慮每個子樹內的問題,然後由子樹轉移到父節點。

照常,我們先考慮大樹的限制:\(V\),也就是揹包容量。那麼,對於每個子樹的子問題處理,都應該是建立在這個限制條件下的。

眾所周知,依賴揹包是樹形 \(\text{DP}\)+揹包,所以我們的 \(dp\) 狀態既要包含揹包的特點,又要包含樹形 \(\text{DP}\) 的特點。

\(dp_{u,j}\) 表示在 \(u\) 的子樹內,揹包容量為 \(j\),能夠買到物品的最大價值。轉移的時候,依次考慮 \(u\) 的每個兒子 \(son\),再依次考慮所有狀態 \(j\),最後依次考慮給這個兒子的體積 \(k\),然後轉移即可。時間複雜度 \(O(nV^2)\)。(最後要算上 \(u\) 本身這個結點。)

for(son)
    for(j=V-w[u]...0)
        for(k=0...j)
            dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[son][k]);

實際上,如果 \(O(nV^2)\) 的演算法無法透過這樣的題,我們一定有其他的演算法來做這樣的題,比如二進位制列舉

相關文章