这道题给出两个数组且每个数字都不同。
要求两两配对,这样每一个配对都有一个大小关系。要求第一组大的个数比第二组大的恰好k个配对。
显然一共有\(n\)个大小关系,那么容易想到\(n-k\)必然是一个偶数才会有对应方案。
那么题目其实是要求第一组比第二组大的个数恰好为\(k+\frac{n-k}{2}=m\)
设\(f_i\)表示至少有\(i\)组满足要求,\(g_i\)表示恰好有\(i\)组满足要求。
那么显然\(f_i=\sum_{j=i}^nC(j,i)g_j\)
根据二项式反演\(f(n)=\sum\limits_{i=n}^m{i\choose n}g(i)\Leftrightarrow g(n)=\sum\limits_{i=n}^m(-1)^{i-n}{i\choose n}f(i)\)
可得\(g_m=\sum_{i=m}^n(-1)^{i-m}f_i\)
问题的关键是\(f_i,i>=m\)的求出。
若设\(w_{i,j}\)表示第一组到了\(i\)第二组到了\(j\)所能构成的最大数量。
可以发现这与\(f_i\)相差很远。
但是若是加上第三维\(k\)表示当前已经构成了的\(k\)组
则时间上不满足要求。
即为精妙的是我们可以舍弃掉第二维\(j\)设\(w_{i,k}\)表示当前到了i已经匹配了k个的方案数。
这样求出的\(w_{n,i}\)再乘以\((n-i)!\)就是我们要求的\(f_i\)了。
考虑\(w_{i,k}\)的转移 如果是从大到小的扫描那么很难转移因为匹配是乱序的。
而若是从小到大的扫描由于大的数永远可以匹配第二组的后缀这样就无须记录到底第二组是谁被匹配了转移仅是\(w_{i-1,k-1}*(c_i-(k-1))\)
\(c_i\)表示第\(i\)个数所能大于第二组的个数。
这道题就做完了。
标签:P4859,sum,个数,反演,满足要求,二项式,第二组 From: https://www.cnblogs.com/chdy/p/17489423.html