多重集排列组合问题

定义

多重集是指可以包含重复元素的广义集合。

排列问题

现在你有一个形如 { a 1 × b 1 , a 2 × b 2 , . . . , a k × b k } \{a_1\times b_1,a_2 \times b_2 , ...,a_k \times b_k\} {a1×b1,a2×b2,...,ak×bk} 的多重集,其中 x × y x\times y x×y 表示这个集合中有 x x x y y y,现在问这个集合有多少种不同的排列方式

这是一道很基础的组合数学问题。

我们先考虑这些元素有多少种排列方式,显然为: ( ∑ i = 1 k a i ) ! (\sum_{i=1}^k a_i)! (i=1kai)!

但是我们还要去除相同的排列,我们注意到,这里面有 a 1 a_1 a1 b 1 b_1 b1,而这些 b 1 b_1 b1 之间交换位置是不会形成新的排列方式的,所以我们要除以 a 1 ! a_1! a1!,也就是这些 b 1 b_1 b1 之间的全排列方案数。

那么最后的答案就是:
( ∑ i = 1 k a i ) a 1 ! a 2 ! . . . a k ! \frac {(\sum_{i=1}^k a_i)} {a_1!a_2!...a_k!} a1!a2!...ak!(i=1kai)

组合问题

现在你有一个形如 S = { a 1 × b 1 , a 2 × b 2 , . . . , a k × b k } S=\{a_1\times b_1,a_2 \times b_2 , ...,a_k \times b_k\} S={a1×b1,a2×b2,...,ak×bk} 的多重集,现在要从中选出 m m m 个数,问有多少种方案。

Part 1

先考虑 m m m 满足 m ≤ a i   ( i ∈ [ 1 , n ] ) m\leq a_i~(i \in [1,n]) mai (i[1,n]) 时的情况。

那么此时相当于没有了 a i a_i ai 的限制,我们设 c i c_i ci 表示 b i b_i bi 这个数选 c i c_i ci 个,那么需要满足 ( ∑ i = 1 n c i ) = m (\sum_{i=1}^n c_i)=m (i=1nci)=m 且对于任意 i i i,有 c i ≥ 0 c_i\geq 0 ci0

那么现在问题等价于:有 k k k 个不同的盘子,你要将 m m m 个相同的苹果放到这 k k k 个盘子里,问方案数。

那么这就是一个经典的组合数插板法问题了(不会请戳这里),方案数为 C m + k − 1 k − 1 = C m + k − 1 m C_{m+k-1}^{k-1}=C_{m+k-1}^m Cm+k1k1=Cm+k1m

Part 2

在此基础上,我们再考虑 m m m 没有特殊性质时的情况。

不妨先忽略 a i a_i ai 的影响,那么根据 Part 1 可以知道,此时的方案数为:
C m + k − 1 m C_{m+k-1}^{m} Cm+k1m

但是我们还要减去不合法的方案,设 f [ i ] f[i] f[i] 表示 b i b_i bi 这个数拿了至少 a i + 1 a_i+1 ai+1 个的方案数。

考虑求 f [ i ] f[i] f[i] b i b_i bi 至少拿 a i + 1 a_i+1 ai+1 个的方案数,也就是先拿 a i + 1 a_i+1 ai+1 b i b_i bi,然后再从剩下的里面拿 m − ( a i + 1 ) m-(a_i+1) m(ai+1) 个的方案数,也就是
f [ i ] = C m + k − 1 − ( a i + 1 ) m − ( a i + 1 ) = C m + k − 1 − ( a i + 1 ) k − 1 f[i]=C_{m+k-1-(a_i+1)}^{m-(a_i+1)}=C_{m+k-1-(a_i+1)}^{k-1} f[i]=Cm+k1(ai+1)m(ai+1)=Cm+k1(ai+1)k1

那么答案就是:
C m + k − 1 m − ∑ i = 1 k f [ i ] C_{m+k-1}^{m}-\sum_{i=1}^k f[i] Cm+k1mi=1kf[i]

还没完! f [ i ] f[i] f[i] 之间计算的方案数是有重复的,比如说:对于 b 1 b_1 b1 拿了 a 1 + 1 a_1+1 a1+1 个,同时 b 2 b_2 b2 拿了 a 2 + 1 a_2+1 a2+1 个,这样的不合法方案会被 f [ 1 ] f[1] f[1] f [ 2 ] f[2] f[2] 各计算一次,所以我们还需要加上 f [ i ] ∩ f [ j ]   ( i ∈ [ 1 , n ] , j ∈ [ 1 , n ] , i ≠ j ) f[i] \cap f[j]~(i\in[1,n],j\in[1,n],i \neq j) f[i]f[j] (i[1,n],j[1,n],i=j)

f [ i ] ∩ f [ j ] f[i] \cap f[j] f[i]f[j] 的计算方法类似上面,即 C m + k − 1 − ( a i + 1 ) − ( a j + 1 ) k + 1 C_{m+k-1-(a_i+1)-(a_j+1)}^{k+1} Cm+k1(ai+1)(aj+1)k+1

那么这样反复容斥下去,就能得到最终的答案:
a n s = C m + k − 1 m − ∑ i = 1 k C m + k − 1 − ( a i + 1 ) k − 1 + ∑ i ∈ [ 1 , n ] , j ∈ [ 1 , n ] , i ≠ j C m + k − 1 − ( a i + 1 ) − ( a j + 1 ) k − 1 + . . . + ( − 1 ) k ∑ p 1 ∈ [ 1 , n ] , p 2 ∈ [ 1 , n ] , ⋯   , p 1 ≠ p 2 , p 1 ≠ p 3 , ⋯ C m + k − 1 − ∑ j = 1 k ( p j + 1 ) k − 1 \begin{aligned} ans=&C_{m+k-1}^m-\sum_{i=1}^k C_{m+k-1-(a_i+1)}^{k-1} + \sum_{i\in[1,n],j\in[1,n],i \neq j} C_{m+k-1-(a_i+1)-(a_j+1)}^{k-1}\\ &+...+(-1)^k \sum_{p_1\in[1,n],p_2\in[1,n],\cdots,p1\neq p_2,p_1 \neq p_3 , \cdots} C_{m+k-1-\sum_{j=1}^k (p_j+1)}^{k-1} \end{aligned} ans=Cm+k1mi=1kCm+k1(ai+1)k1+i[1,n],j[1,n],i=jCm+k1(ai+1)(aj+1)k1+...+(1)kp1[1,n],p2[1,n],,p1=p2,p1=p3,Cm+k1j=1k(pj+1)k1

应用

Devu and Flowers   题解

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值