视频加载失败

安吉D4-G

810 字
4 分钟
安吉D4-G
原题呈现

P5505 分特产#

题目描述#

JYY 带队参加了若干场 ACM/ICPC\text{ACM/ICPC} 比赛,带回了许多土特产,要分给实验室的同学们.

JYY 想知道,把这些特产分给 nn 个同学,一共有多少种不同的分法?当然,JYY 不希望任何一个同学因为没有拿到特产而感到失落,所以每个同学都必须至少分得一个特产.

例如,JYY 带来了 22 袋麻花和 11 袋包子,分给 AABB 两位同学,那么共有 44 种不同的 分配方法:

AA:麻花, BB:麻花、包子

AA:麻花、麻花, BB:包子

AA:包子, BB:麻花、麻花

AA:麻花、包子, BB:麻花

输入格式#

输入数据:

第一行是同学的数量 nn 和特产的种类 mm

第二行包含 mm 个整数,表示每一种特产的数量.

n,mn, m 不超过 10001000 ,每一种特产的数量不超过 10001000

输出格式#

输出一行,不同分配方案的总数.

由于输出结果可能非常巨大,你只需要输出最终结果 mod 109+7\bmod\ {10^9+7} 的数值就可以了.

输入输出样例 #1#

输入 #1#

5 4
1 3 3 5

输出 #1#

384835

正难则反,我们先抛弃“所以每个同学都必须至少分得一个特产”这一个条件,对于每一种特产,我们需要求将 aia_i 个特产分给 nn 位同学的方案数,这等同于将 aia_i 个没标号的小球放在 nn 个标号的盒子里,允许空盒.共有 (ai+n1n1)\binom{a_i+n-1}{n-1} 种可能.由于对于每一种特产都有上述方案,因此总方案数 a(0)a(0) 为:

a(0)=i=1m(ai+n1n1)a(0) = \prod^{m}_{i=1} \binom{a_i+n-1}{n-1}

接下来处理空盒的情况.

我们使用容斥,答案为 TT 减去钦定任意一个盒子为空的方案数,加上钦定任意两个盒子为空的方案数,减去钦定任意三个盒子为空的方案数,直到所有盒子都为空的方案数.

存在 kk 个盒子为空的方案数 a(k)a(k),可以想象成去掉这 kk 个盒子,其他盒子可以为空,也可以不为空,可以使用上面计算 k=0k=0 的方法,因此对于每一种钦定方案所对应的方案数 a(k)a'(k),有:

a(k)=i=1m(ai+nk1nk1)a'(k)=\prod^{m}_{i=1} \binom{a_i+n-k-1}{n-k-1}

由于钦定了 kk 个盒子为空,这又有 (nk)\binom{n}{k} 种钦定方法,所以有:

a(k)=(nk)a(k)a(k)=\binom{n}{k} a'(k)

显然,各个约束地位相等,因此根据容斥公式,可以算出答案 ansans,公式如下:

ans=k=0n((1)ka(k))ans = \sum_{k=0}^{n}((-1)^k a(k))

标程

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2005;
const int MOD = 1e9 + 7;
int n, m, a[N], C[N][N];
int ans;
int calC(int x, int y) {
if (x == y || y == 0)
return 1;
if (C[x][y] == 0) {
C[x][y] = (calC(x - 1, y) + calC(x - 1, y - 1)) % MOD;
}
return C[x][y];
}
signed main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
int tot = 1;
for (int j = 1; j <= m; j++) {
(tot *= calC(n + a[j] - i - 1, n - i - 1)) %= MOD;
}
int coe = calC(n, i);
if (i % 2 == 1)
coe = (MOD - coe) % MOD; // (-1)^i
ans = (ans + coe * tot) % MOD;
}
cout << ans % MOD;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

安吉D4-G
https://blog.jerrylab.top/posts/problem/anji2026/D4/G/
作者
Jerry
发布于
2026-08-06
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Jerry
Hello, I'm Jerry.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
80
分类
3
标签
35
总字数
89,198
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0