2021 年百度之星·程序设计大赛 - 复赛 1002 Add or Multiply 1(第2类斯特林数)
【摘要】
problem
solution
想到了是n个小球放到m个盒子里以后,剩下的就是板子了
#include<bits/stdc++.h>
using namespace std;
...
problem
solution
- 想到了是n个小球放到m个盒子里以后,剩下的就是板子了
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 3010;
const int mod = 1e9+7;
LL fac[maxn];
LL init(){ fac[0] = 1; for(int i = 1; i < maxn; i++)fac[i]=fac[i-1]*i%mod; return 0ll;}
LL st[maxn][maxn];
LL init2(){st[0][0]=1; for(int i = 1; i < maxn; i++)for(int j = 1; j <= i; j++)st[i][j]=(st[i-1][j-1]+1ll*j*st[i-1][j]%mod)%mod; return 0ll;}
int main(){
init(); init2();
int T; cin>>T;
while(T--){
int n, m; cin>>n>>m;
LL ans = 0;
for(int i=1; i<=n &&i<=m; i++)ans=(ans+2ll*st[n][i]*st[m][i]%mod*fac[i]%mod*fac[i]%mod)%mod;
for(int i=1; i+1<=n &&i<=m;i++)ans=(ans+1ll*st[n][i+1]%mod*st[m][i]%mod*fac[i+1]%mod*fac[i]%mod)%mod;
for(int i=1; i+1<=m &&i<=n;i++)ans=(ans+1ll*st[m][i+1]%mod*st[n][i]%mod*fac[i+1]%mod*fac[i]%mod)%mod;
cout<<ans<<"\n";
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。
原文链接:gwj1314.blog.csdn.net/article/details/119858154
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)