Description
给两组 n 个数 a[], b[] ,保证数字互不相同,问有多少种将它们配对的方式,使得 a[i] > b[i] 的对数恰好为 k
1<=k<=n<=4000
Analysis
看到恰好,这肯定很难做的,考虑套路:转化成至少再减去多的
那么我们可以开始愉快地dp
设f[i][j]表示上面到第i个数,保证形成了j个贡献的方案数
f[i][j]=f[i−1][j](不匹配)+f[i−1][j−1]∗(num[i]−(j−1))(匹配)
num[i] 表示a[i]大于num[i]个b[j]
这样dp我们只确定了匹配的方案数,对于未匹配的方案数还要乘上个(n-i)!,即
设 g[i] 表示恰好 i 组 a[k] > b[k] 的方案数
g[i]=f[n][i]∗(n−i)!−∑nj=i+1g[j]∗C(j,i)
感受一下
O(nk)