HDUOJ 1292 人员分组递推公式推导

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1292

问题

一共有n个同学参加夏令营,这些同学进行自由组队(每对人数不限),一共会有多少种不同的组队方案呢?

公式推导

设 f(n, m)(1 <= m <= n) 表示 n 个人分成 m 组,这样子的分组方案数量。
设 F(n) = f(n,1) + f(n,2) + ... + f(n,n),即为 n 个人的总分组方案数量。
可以知道:
f(n,n) = 1(每个人一组,显然只有一种分组方案),
f(n,1) = 1(所有人都在同一个组里,显然只有一种分组方案)。
假如已经推算出 n 个人分成 m 组的分组方案,此时增加一个人依然拆分成m组,相比之前到底改变了什么呢?

  1. 新人加入到了原来的分组里,那么新人可以在每个方案的 m 组里任选一组来加入,f(n+1, m) = f(n, m) * m;
  2. 新人单独构成一组,他没有加入任何组,那么想要凑到 m 组只需之前的 n 个人分成 m-1 组的方案分别加上新人所在组,f(n+1, m) = f(n, m-1);

由以上互斥的两种情况合并得:

f(n + 1, m) = f(n, m) * m + f(n, m - 1)

分组方案举例以及带入公式计算校验

a

ab
a b

abc
ac b
a bc
ab c
a b c

abcd
acd b
ac bd
ad bc
a bcd
abd c
ab cd
ad b c
a bd c
a b cd
abc d
ac b d
a bc d
ab c d
a b c d

f(1, 1) = 1

f(2, 1) = 1
f(2, 2) = 1

f(3,3) = 1
f(3,2) = f(2,2) * 2 + f(2,1) = 3
f(3,1) = 1

f(4,1) = 1
f(4,2) = f(3,2) * 2 + f(3,1) = 3 * 2 + 1 = 7;
f(4,3) = f(3,3) * 3 + f(3,2) = 1 * 3 + 3 = 6;
f(4,4) = 1
F(4) = 15


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值