March - May 做題合集

TulipeNoire發表於2024-03-23

「省選聯考 2024」迷宮守衛

首先考慮是最大化字典序,因此按位貪心。

考慮第一位怎麼求。有一個簡單的做法就是二分,然後轉換成 \(0\)/\(1\) 然後 dp。就是令 \(f_{u,0/1}\) 表示讓 u 這個點開始,走的第一個葉子最優是 \(0\)/\(1\) 的最小花費。然後再判斷是否小於等於 \(k\)

這個做法怎麼擴充套件呢?

可以考慮把讓第一位最優的最優決策(花費最小)保留下來,然後模擬 Bob 的行走,來判斷 Bob 第二位的最優結果。

這個時候 Bob 是從一個節點回溯上來,要到另一個還沒有涉足過的子樹。

那麼我們其實完全可以把將要前往的一棵子樹內的決策清空,然後再算這個子樹的最優決策。

發現這個做法有點問題。如果我們從 \(u\) 走到 \(u\) 的某個子樹,那麼 \(u\) 這個點的決策有可能改變。所以我們就列舉 \(u\) 這個點的決策,然後再暴力計運算元樹內的決策。

這樣就做完了。時間複雜度 \(O(2^nn^2)\)。然而其實二分 dp 可以換成更好的做法,把複雜度降到 \(O(2^nn)\)

「JOISC 2019」時をかけるビ太郎

口胡。

首先相鄰兩個區間不交是極其簡單的。隨便討論就可以了。

然後發現一段有交的區間等價於它們的交。於是直接把有交的區間縮成它們的交,然後轉化成上面的情況,線段樹隨便做做就完事了。

相關文章