2018"百度之星"程序設計大賽 - 資格賽 - 題集
1001
$ 1 \leq m \leq 10 $
像是狀壓的復雜度。
於是我們(用二進制)枚舉留下的問題集合
然後把這個集合和問卷們的答案集合 $ & $ 一下
就可以只留下被選中的問題的答案了。
之後掃一遍隨便判一下重。
1002
非空子串中字典序最小的子串長度一定是 $ 1 $ 。
咱們就記錄一下每一個字母出現次數的前綴和,
每次詢問就找到出現過的最先的那個字符就星了。
1003
整數規劃好像是個NPC問題,
所以我們肯定不能直接上整數規劃。
咱們來嘗試把問題轉換一下。
n=2
x1---y1
\ /
X
/ x2---y2
看起來像是個二分圖。
二分圖我們可以想到什麽呢?
KM算法。
它有一個奇特的性質,
就是假設 $ x_i $ 和 $ y_j $ 被一條邊 $ a_{i,j} $ 匹配上,
那麽 $ x_i $ 的標簽 $ l_i $ 和 $ y_j $ 的標簽 $ r_j $ 有這樣一個式子是成立的:
$ l_i + r_j \geq a_{i,j} $
題目要求 $ l_i + r_j \leq a_{i,j} $ ?
把它變成 $ - l_i - r_j \leq -a_{i,j} $ ,
然後硬上KM就好了。
註意標簽的初始值。
1004
如果你有好辦法,
請教教我這個蒟蒻吧。
1005
我們先想一下動態規劃。
設 $ f_{i,j} $ 表示以第 $ i $ 個數打止的長度為 $ j $ 的上升子序列個數。
首先 $ f_{i,1} = 1 $ 。
然後也可以知道 $ f_{i,j} = \sum{f_{k,j-1}} , k < i \quad \mathrm{and}\quad q_k < q_i $ 。
這可以用一些樹狀數組來幫助它轉移。
但是 $ 1 \leq n \leq 10000 $ ...
註意一下這句話。
你可以認為給定的排列是從所有 1,2,...,n 的排列中等概率隨機選出的。
如果是隨機數據的話,我們可以得知,
它的最長的lis不會太長。
可能長度只有幾百也說不定。
1006
要答案最優的話,
就先只用條件中給定的2種顏色跑一遍最小生成樹,
然後“恰好k條滿足條件的邊”的答案就用剩下的邊從小往大加來更新答案。
把紅綠和綠藍的情況分別搞一下。
註意圖可能不連通。
2018"百度之星"程序設計大賽 - 資格賽 - 題集