盒子与球
题目描述
现有 rrr 个互不相同的盒子和 nnn 个互不相同的球,要将这 nnn 个球放入 rrr 个盒子中,且不允许有空盒子。请求出有多少种不同的放法。
两种放法不同当且仅当存在一个球使得该球在两种放法中放入了不同的盒子。
输入格式
输入只有一行两个整数,分别代表 nnn 和 rrr。
输出格式
输出一行一个整数代表答案。
样例 #1
样例输入 #1
3 2
样例输出 #1
6
提示
样例输入输出 1 解释
有两个盒子(编号为 1,21, 21,2)和三个球(编号为 1,2,31, 2, 31,2,3),共有六种方案,分别如下:
| 盒子编号 | 方案 1 | 方案 2 | 方案 3 | 方案 4 | 方案 5 | 方案 6 |
|---|---|---|---|---|---|---|
| 盒子 111 | 小球 111 | 小球 222 | 小球 333 | 小球 2,32, 32,3 | 小球 1,31, 31,3 | 小球 1,21, 21,2 |
| 盒子 222 | 小球 2,32, 32,3 | 小球 1,31, 31,3 | 小球 1,21, 21,2 | 小球 111 | 小球 222 | 小球 333 |
数据规模与约定
对于 100%100\%100% 的数据,保证 0≤r≤n≤100 \leq r \leq n \leq 100≤r≤n≤10,且答案小于 2312^{31}231。
C++实现
#include
//#include
#include <bits/stdc++.h>
using namespace std;
int func(int n,int m){
if(m<=0||n<m){
return 0;
}
if(nm){
return 1;
}else{
return func(n-1,m-1)+func(n-1,m)*m;
}
}
int fac(int i){
if(i1){
return 1;
}else{
return i*fac(i-1);
}
}
int main()
{
int n,m;
cin>>n>>m;
cout<<func(n,m)*fac(m);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容
740

被折叠的 条评论
为什么被折叠?



