CF1264D(組合數)
阿新 • • 發佈:2021-07-27
把雲剪貼簿裡的東西發出來順便複習一下
考慮如何貪心確定一個序列的深度?
可以考慮最左邊的左括號,最右邊的有括號匹配,然後扔掉匹配的兩個括號後繼續做,這樣是最大的。
考慮一對括號如何會產生貢獻?
手玩一下能發現,當 \((i,j)\) , \(i\) 的左邊左括號數 = \(j\) 右邊右括號數,且 s[i]=='(' , s[j]==')'
,就會有貢獻。
但是要列舉兩個,比較不可做,如何簡化問題?
考慮換個列舉,貢獻只算在右括號上,設 s[i]=='('
。那麼 \(i\) 右邊的 )
比 \(i\) 左邊的 (
嚴格少, \(i\) 就一定會被匹配一次。
設 \(i\) 左邊的 (
為 \(A\)
?
為 \(C\) 個;設右邊的 )
為 \(B\) 個,?
為 \(D\) 個。
\(i\) 的貢獻為:
\[\sum_{x=1}^C \sum_{y=1}^D \binom{C}{x}\binom{D}{y} [x+A>y+B] \]這個 \(x+A>y+B\) 相當於 \(x-y>B-A\) ,減法沒法化簡,但是可以轉化成加法:
\[\sum_{x=1}^C \sum_{y=1}^D \binom{C}{C-x}\binom{D}{y} [x+A>y+B] \]用 \(x\) 替換 \(C-x\)
\[\sum_{x=1}^C \sum_{y=1}^D \binom{C}{x}\binom{D}{y} [C-x+A>y+B] \]\[\sum_{x=1}^C \sum_{y=1}^D \binom{C}{x}\binom{D}{y} [x+y\le A+C-B-1] \]\[\sum_{k=0}^{A+C-B-1} \sum_{x=1}^C \sum_{y=1}^D \binom{C}{x}\binom{D}{y}[x+y=k] \]後面柿子成為了範德蒙德卷積,直接替換掉兩個迴圈:
由於列舉的 \(i\) 只能為 )
或 ?
,因此 \(C+D\) 只有兩種可能取值。
然後處理兩個組合數字首和就能算了。
$$\Huge \text{Goodbye OI}$$