题目描述
@发源于 小朋友最近特别喜欢球。有一天他脑子抽了,从口袋里拿出了N个不同的球,想把它们放到M个相同的盒子里,并且要求每个盒子中至少要有一个球,他好奇有几种放法,于是尝试编程实现,但由于他天天不好好学习,只会上B站看游泳教练,于是他向你求助。
输入输出格式
输入格式:
多组数据,每行两个数N,M。
输出格式:
每组数据一行,表示方案数。
输入输出样例
输入样例#1:
4 2 1 1
输出样例#1:
7 1
说明
【样例解释】
N=4,M=2
1,2 3 4
2,1 3 4
3,1 2 4
4,1 2 3
1 2,3 4
1 3,2 4
1 4,2 3
对于20%的数据,满足1≤N,M≤10;
对于100%的数据,满足1≤N,M≤100,数据组数≤10。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,f[110][110]; int stirling(int a,int b){ if(f[a][b]!=-1)return f[a][b]; if(b==0)return f[a][b]=0; if(a==b)return f[a][b]=1; if(a==0)return f[a][b]=0; return f[a][b]=b*stirling(a-1,b)+stirling(a-1,b-1); } int main(){ memset(f,-1,sizeof(f)); while(scanf("%d%d",&n,&m)!=EOF){ printf("%d\n",stirling(n,m)); } }