Devu and Flowers
题目大意
你有 n 个花瓶,第 i 个花瓶中有 fi 朵花,现在要选出 s 朵花,求方案数对 109+7 取模的结果。
其中数据范围满足,1≤n≤20,0≤fi≤1012,0≤s≤1014。
思路
先考虑 fi→∞ 时选择 s 朵花的方案数,考虑使用插板法求解。
s 朵花中间一共有一些空子,因为可以留空所以每次插入一个隔板可以插入的地方都会增加 1。
所以总共的方案数为 i=s+1∏n+s−1i,但是去除本质相同的也就得到:
(n−1)!i=s+1∏n+s−1i=s!⋅(n−1)!(n+s−1)!=Cs+n−1s=Cs+n−1n−1
其中运用了组合数的性质:
Cnm=Cnn−m
定义 si 表示第 i 种花选取了超过 fi 个,那么答案显然为:
Cs+n−1s−∣i=1⋃nsi∣
因为直接求解非常困难,考虑容斥。
对于 si,首先我们需要选出 fi+1 朵花用于购买第 i 中花保证其不合法,接着随意的购买其余的花。显然,这样操作的方案数为 Cs−fi−1n。
对于 si∪sj,与上面的思路一样我们应该用 fi+1 和 fj+1 朵花分别购买第 i 种和第 j 中保证其并不合法,接下来随意的购买任意的花。容易得到,这样操作的方案数为 Cs−fi−fj−2n。
根据这个思路可以得到对于选取集合 g,其方案数为:
Cn−∑i∈g(fi+1)n
直接穷举所有的集合 g,接着对上面的式子进行容器即可,时间复杂度为 O(2n⋅n)。
Submission #271015900 - Codeforces