hdu 4372 Count the Buildings(第一类斯特林数)
2017-11-08 21:40
393 查看
从前向后看可以看到F栋楼,去掉中间最高那栋楼,有F-1栋楼,看到的第一栋楼和看到的第二栋楼之间的楼,分给第一栋楼,属于同一组楼,后边的依次类推,共F-1组楼,对于每组楼,假设有X栋楼,去掉我们看到的这一栋楼固定在第一个位置(这一组最高的楼在最靠前的位置),剩下X-1栋楼随意排列,X-1栋楼的的排列就是X栋楼的环排列,这就分成了F-1个环排列,从后向前看的也是这样。这就是N栋楼形成了F+B-2个环排列,第一类斯特林数。
#include <bits/stdc++.h> using namespace std; const int MAXN = 2010; const long long mod = 1e9+7; long long C[MAXN][MAXN]; long long S[MAXN][MAXN]; void init() { C[0][0] = 1; S[0][0] = 1; for(int i = 1; i < MAXN; ++i) { C[i][i] = 1; C[i][0] = 1; S[i][i] = 1; S[i][0] = 0; for(int j = 1; j < i; ++j) { C[i][j] = (C[i-1][j] + C[i-1][j-1])%mod; S[i][j] = ((i-1)%mod*S[i-1][j]%mod + S[i-1][j-1])%mod; } } } int main() { init(); int T,N,F,B; scanf("%d",&T); while(T--) { scanf("%d %d %d",&N,&F,&B); if(F+B-1 > N) { puts("0"); continue; } printf("%lld\n",C[F+B-2][F-1]%mod*S[N-1][F+B-2]%mod); } return 0; }
相关文章推荐
- [第一类斯特林数 组合] HDU 4372 Count the Buildings
- 【HDU 4372】 Count the Buildings (第一类斯特林数)
- HDU 4372 Count the Buildings [第一类斯特林数]
- 【第一类斯特林数】HDU_4372_ Count the Buildings
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- [HDU 4372]Count the Buildings(第一类斯特林数+组合数)
- Count the Buildings HDU - 4372 第一类striling 数
- [HDU]4372 Count the Buildings 第一类斯特林数
- Count the Buildings HDU - 4372 第一类striling 数
- Count the Buildings HDU - 4372 第一类striling 数
- HDU 4372 Count the Buildings(第一类Stirling数)
- HDU 4372 Count the Buildings [组合数学]
- hdu 4372 Count the Buildings
- HDU 4372 Count the Buildings(组合数学-斯特林数,组合数学-排列组合)
- HDU 4372 - Count the Buildings(组合计数)