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\) 的點,滿足每個點互相獨立:
直接累加會算重,\(g(T)\) 表示集合 \(T\) 的容斥係數。
\(f(S \setminus T)\) 實際意義表示欽定集合 \(T\) 入度為 \(0\) 的方案,我們要讓他變成入度為 \(0\) 的集合恰為 \(T\) 的方案數。
顯然欽定 \(T\) 的方案會被所有 \(T\) 的非空子集恰好算一遍,容斥係數需要滿足:
不難發現 \(g(T)\) 只與 \(\vert T\vert\) 有關,直接用 \(g(\vert T\vert)\) 表示。手算一下前幾項:\(g(1) = 1, g(2) = -1, g(3) = 1 \cdots\)。
猜測 \(g(i) = (-1)^{i + 1}\):
符合條件。直接列舉子集 \(O(3^n)\),線上集合無交併卷積最佳化到 \(O(n^22^n)\)。submission
C
題意: