传送门: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