用到二维数组和状态转移方程:
#include<stdio.h>
int main()
{
int n,r,i,j;//n个球,r个盒
int f[100][100];
f[1][1] = 1;//边界,一个球放到一个盒共一种放法
scanf("%d %d",&n,&r);
if(n==0||r>n)//没球或盒多
{
printf("0");
return 0;
}
else
{
for(i=2;i<=n;i++)
for(j=1;j<=i;j++)
f[i][j] = f[i-1][j-1]*j+f[i-1][j]*j;//相当于分为i-1和1这两堆有几种方法
printf("%d",f[n][r]);
}
return 0;
}