板刷计划:ARC067

传送门:https://atcoder.jp/contests/arc067/tasks/arc067_c

前言;又被组合数学dp教训了

C.水题

D.SB题

E.纯组合数学 + 动态规划(好题)

题目大意:

将n个人划分成若干组。 每一组大小,每个大小出现的次数要么为0次,要么为次.现在给你n,A,B,C,D,问你不同的方案数。两个方案视作不同当且仅当存在两个人,它只在某一个方案中存在于同一个组中.

例如: 7 1 3 1 2

只能分成: 2 + 2 + 3, 方案数为105种.

题目思路:

先考虑这个问题如何计数:通过观察样例不难发现,就是组合数相乘。对于大小相同的组,要除一个全排列打消顺序。

不难利用动态规划:形成前缀和的形式。我们枚举从i个人中选个大小为j的组的方案数:

注意:式子右边的常系数的推导如下:

. 由于组之间无差别,所以还需要乘一个 打消组间顺序.

时间复杂度:

写起来是三重循环的递推,但不是n^3.大约分析如下:(估算复杂度上界)

注:第二步到第三步利用了调和级数定理.

复杂度上界为:

AC代码:https://atcoder.jp/contests/arc067/submissions/17136658

你可能感兴趣的:(板刷计划:ARC067)