【题目描述】【输入】给出n和k。 【输出】n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。 【输入样例】
【输出样例】
|
#include <iostream>
using namespace std;
long long Split(int n,int plate) //等同于n个不同的数 放到相同的盘子里了
{
//这步不能跟后面的交换,因为n==plate==0这情况应返回是0,而不是1
if(n<plate||plate==0) //例9个数放到 10个盘子,这种情况不能使每个盘子有数字,则为0
return 0;
if(n==plate||n==1) //一个数 只能有一种放法,如果n个数,n个盘子也只能有一个放法
return 1;
// 一个数 放一个盘子+ 这个数,先不放,让别的先放好放好共有 Split(n-1,plate)种,然后等他们放好后,再放其中一个盘子,
//显然是分步原理,根据概论率分步原理得 plate* Split(n-1,plate)
return Split(n-1,plate-1)+Split(n-1,plate)*plate;
}
int main()
{
int n,k;
cin>>n>>k;
cout<<Split(n,k);
return 0;
}
标签:4.5,plate,1315,信奥,int,long From: https://www.cnblogs.com/nanshaquxinaosai/p/18408674