[toj4087]m个不同的箱子放n种不同的球
来源:互联网 发布:人工智能属于什么专业 编辑:程序博客网 时间:2024/06/09 21:39
首先有个三角关系:
1
1 1
1 3 1
1 7 5 1
1 15 17 7 1
..
递推为f[i][j] = j*f[i-1][j] + f[i-1][j-1]
上述是第二类斯特灵数的地推关系
第二类斯特灵数描述的问题类似于:m个相同的箱子放n种不同的球,那么分法如上述.
如果箱子不同,那么先对箱子排列,所以答案为ans(n,m) = m! * f[n][m]
而本题就是求C(m,1) * 1! * f[n][1] + C(m,2) * 2! * f[n][2] + ... + C(m, m-1) * (m-1)! * f[n][m-1]
数据不大,但我还是预处理了,组合数(杨辉三角的方法)(C[][]数组, C[i][j]表示从i个中选j个), 阶乘(G[]数组, G[i]表示i的阶乘), 和f[i][j](dp[][]数组,如上,dp[i][j]表示i个箱子放j种球)这三部分:
#include <cstdio>#include <cstring>typedef long long ll;const int MAXN = 505;const int MAXM = 11;const ll MOD = 200000007;ll dp[MAXN][MAXN];ll G[MAXN];ll C[MAXN][MAXN];ll ans[MAXN][MAXM];void init(void) {for (int i = 1; i < MAXN; ++i) {dp[i][1] = 1;dp[i][i] = 1;for (int j = 2; j < i; ++j) {dp[i][j] = (dp[i-1][j]*j + dp[i-1][j-1]) % MOD;}}G[0] = 1;for (int i = 1; i < MAXN; ++i) {G[i] = G[i-1]*i % MOD;}memset(C, 0, sizeof(C));for (int i = 1; i < MAXN; ++i) {C[i][1] = i;for (int j = 2; j <= i; ++j) {C[i][j] = C[i-1][j] + C[i-1][j-1];C[i][j] %= MOD;}}for (int m = 1; m < MAXM; ++m) {for (int n = 1; n < MAXN; ++n) {ans[n][m] = 0;for (int i = 1; i < m; ++i) {ans[n][m] += C[m][i] * G[i] * dp[n][i];ans[n][m] %= MOD;}}}}int main() {init();int T, n, m;static int cas = 1;scanf(" %d", &T);while (T--) {scanf(" %d %d", &n, &m);printf("Case %d: %lld\n", cas++, ans[n][m]);}return 0;}
0 0
- [toj4087]m个不同的箱子放n种不同的球
- [toj4087]m个不同的箱子放n种不同的球
- 将n个相同小球放入m个不同盒子内的放法种数
- POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- N个鸡蛋放M个篮子,每个篮子不空,保证提不同组合的篮子能取出1至N个鸡蛋
- n个球m个不同的桶每个桶容量有限,求所有放置方法。
- 从 n 个数字中选出 m 个不同的数字,保证这 m 个数字是等概率的
- 从M个不同字符中任取N个字符的所有组合
- //组合问题(从M个不同字符中任取N个字符的所有组合)
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- 组合问题(从M个不同字符中任取N个字符的所有组合)
- 从M个不同的整数中,选择N个出来排列
- OJ 系列之从M个不同字符中任取N个字符的所有组合
- Java中从m个数中随机选取n个不同的数(m>=n),并进行排序
- 生成k个不同的随机数,从m到n,并输出最大值的程序代码
- 2014华为机试题11:截取数字
- Same Tree LeetCode
- oracle中去掉文本中的换行符、回车符、制表符小结
- IOS UIAlertView 上添加View
- hdu 4937 Lucky Number
- [toj4087]m个不同的箱子放n种不同的球
- 2014 多校07 1001 Prime Tree
- oracle学习 复杂查询
- Reverse Number hdoj 1266
- 猫儿PDF-Word格式转换经验谈
- Linux相关命令使用安装下载删除
- symfony初学者必须掌握的知识
- 变成多维阵列
- symfony ManyToMany(多對多關系)