CSP2024-12

Lu_xZ發表於2024-09-01

A

題意:\(n\) 塊餅乾,每塊餅乾有溫度 \(t_i\),吃一塊餅乾的代價等於 \(\vert t_i - lst\vert\)\(lst\) 表示吃/喝的前一樣餅乾/水的溫度。

給出初始水溫 \(w\),現在先喝一口水,以任意順序吃掉 \(n\) 個餅乾,求最小和最大的代價分別是什麼。

最小:\(\max (w, \max t) - \min(w, \min t)\)

如果 \(w \in (\min t, \max t)\),由於喝水是沒有代價的,可以從 \(w\) 先到 \(\min t\),再回到 \(w\) 直接到 \(\max t\);其他情況顯然。

最大:從 \(w\) 在排完序的陣列上左右橫跳,列舉一下是 \(\to 1 \to n \to 2\) 還是 \(\to n \to 1 \to n - 1\),最優性不會證明,反正很優

submission

B

題意:求 \(n\) 個點 \(m\) 條邊的無向圖定向成 DAG 的方案數。\(n \le 20, m \le \frac{n(n - 1)}{2}\)

\(f(S)\) 表示 \(S\) 匯出子圖的方案數,列舉子集 \(T\) 作為入度為 \(0\) 的點,滿足每個點互相獨立:

\[f(S) = \sum_{T \subseteq S\land T \text{ 是獨立集}}g(T) \cdot f(S \setminus T) \]

直接累加會算重,\(g(T)\) 表示集合 \(T\) 的容斥係數。

\(f(S \setminus T)\) 實際意義表示欽定集合 \(T\) 入度為 \(0\) 的方案,我們要讓他變成入度為 \(0\) 的集合恰為 \(T\) 的方案數。

顯然欽定 \(T\) 的方案會被所有 \(T\) 的非空子集恰好算一遍,容斥係數需要滿足:

\[1 = \sum_{i = 1}^{\vert T\vert}\begin{pmatrix}\vert T\vert\\ i\end{pmatrix}g(i) \]

不難發現 \(g(T)\) 只與 \(\vert T\vert\) 有關,直接用 \(g(\vert T\vert)\) 表示。手算一下前幾項:\(g(1) = 1, g(2) = -1, g(3) = 1 \cdots\)

猜測 \(g(i) = (-1)^{i + 1}\)

\[\sum_{i = 1}^{n}\begin{pmatrix}n\\ i\end{pmatrix}(-1)^{i + 1} = \bigg(-\sum_{i = 0}^{n}\begin{pmatrix}n\\ i\end{pmatrix}(-1)^{i}\bigg) + 1 = 1 \]

符合條件。直接列舉子集 \(O(3^n)\),線上集合無交併卷積最佳化到 \(O(n^22^n)\)submission

C

題意: