P4859 已经没有什么好害怕的了

传送门

题意:给定两个长度 \(n\) 的互不相同的序列 \(a,b\)。要求将它们两两匹配。求有多少种匹配方案恰好有 \((n+k)/2\)\(a_i>b_j\)\(n\le 2000\)。如果 \((n+k)\bmod 2=1\) 输出 \(0\)

先将 \(a,b\) 从小到大排序。\(dp_{i,j}\) 表示让 \(a_{1\sim i}\) 匹配 \(b_{1\sim n}\)至少\(j\)\(a_x>b_y\) 的方案数。

\(r_i\) 表示:\(b_{1\sim r_i}<a_i\)\(b_{r_i+1}>a_i\)

\(dp[i][0]=dp[i-1][0],dp[i][j]=dp[i-1][j]+(r_i-j+1)dp[i-1][j-1]\)。可以 \(O(n^2)\) DP。

则至少有 \(i\)\(a_x>b_y\) 的方案数是 \(f_i=dp_{n,i}\times (n-i)!\)

然后怎么求恰好?

二项式反演:至少转恰好。

\[g(n)=\sum_{i=1}^n C_n^i\cdot f(i)\iff f(n)\sum_{i=1}^n (-1)^{n-i} C_n^i \cdot g(i) \]

\(ans=\displaystyle\sum_{i=k}^n(-1)^{i-k}C_i^k\cdot f_i\)

posted @ 2024-04-01 20:19  FLY_lai  阅读(5)  评论(0编辑  收藏  举报