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

来源:互联网 发布:家居装饰设计软件 编辑:程序博客网 时间:2024/06/13 21:56

题目链接: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)

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

aaba babcac ba bcab ca b cabcdacd bac bdad bca bcdabd cab cdad b ca bd ca b cdabc dac b da bc dab c da b c df(1, 1) = 1f(2, 1) = 1f(2, 2) = 1f(3,3) = 1f(3,2) = f(2,2) * 2 + f(2,1) = 3f(3,1) = 1f(4,1) = 1f(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) = 1F(4) = 15


0 0
原创粉丝点击