SDNU 1011 盒子与球
第二类斯特林数
m个相同盒子 n个互不相同的球的情况是S(n,m)种
m个互不相同的盒子 n个互不相同的球的情况有:m!*S(n,m)种
递推式
S(n,m)=S(n-1,m-1)+m*S(n-1,m)
所以这个题是Dp+阶乘
#include <cstdio>
#include <iostream>
using namespace std;
int n,m;
int dp[50][50];
int a[50];
int f(int x){
if(x==1||x==0) return 1;
if(x==2) return 2;
else return f(x-1)*x;
}
int main(){
cin>>n>>m;
dp[0][0]=0;
for(int i=1;i<=n;i++){
dp[i][i]=1;
dp[i][0]=0;
}
for(int i=2;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=dp[i-1][j]*j+dp[i-1][j-1];
}
}
f(m);
cout<<dp[n][m]*a[m]<<endl;
return 0;
}