这里有一个比较不错的博客,大家可以参考一下。https://blog.csdn.net/qq_32239767/article/details/80268218
我主要是描述怎么实现的,还有就是做测试用例,本人只穷举到7,也就是球的数目只是穷举到7个球,没有再穷举了。小伙伴在看的时候注意一下标红加粗的字段,这就是本思想的核心内容。本方法使用递归,目前还没想到递推或者循环的方法这样可以减少时空复杂度。
/********************* 程序分界线*************************************/
#include <iostream>
using namespace std;
int f(int m,int n);
int fun(int m,int n);
/*一下是测试用例
查看方法是:M表示球的数目,N表示箱子数目,SUM表示方法数据
在此举一个栗子:M=5 ,N=1,SUM=1,就是说5个球随机放到1个箱子里,只有1种可能
M=6 ,N=2,SUM=4,就是说6个球随机放到3个箱子里,只有7种可能,
分别是:只把一个6个球放在一个一个箱子,也就是一个6;把一个箱子放1个球,一个箱子放5个球,也就是15;
把一个箱子放2个球,一个箱子放4个球,也就是24;把一个箱子放3个球,一个箱子放3个球,也就是33;
把一个箱子放1个球,一个箱子放1个球,一个箱子放4个球,也就是114;
把一个箱子放1个球,一个箱子放2个球,一个箱子放3个球,也就是123;
把一个箱子放2个球,一个箱子放2个球,一个箱子放2个球,也就是222;
M N sum
1 1 1
1 2 1
2 1 1 2
2 2 2 2 11
3 1 1 3
3 2 2 3 12
3 3 3 3 12 111
4 1 1 4
4 2 3 4 13 22
4 3 4 4 13 22 112 111
5 1 5 5
5 2 3 5 14 23
5 3 5 5 14 23 113 122
5 4 6 5 114 23 113 122 1112
5 5 7 5 114 23 113 122 1112 11111
6 1 1 6
6 2 4 6 15 24 33
6 3 7 6 15 24 33 114 123 222
6 4 9 6 15 24 33 114 123 222 1113 1212
6 5 10 6 15 24 33 114 123 222 1113 1212 11112
6 6 11 6 15 24 33 114 123 222 1113 1212 11112 111111
7 1 1 7
7 2 4 7 61 25 34
7 3 8 7 61 25 34 115 124 133 223
7 4 11 7 61 25 34 115 124 133 223 1114 1123 1222
7 5 13 7 61 25 34 115 124 133 223 1114 1123 1222 11113 11122
7 6 14 7 61 25 34 115 124 133 223 1114 1123 1222 11113 11122 1111112
7 7 15 7 61 25 34 115 124 133 223 1114 1123 1222 11113 11122 1111112 1111111
*/
/*
besign by :郑富荣
email :986268320@qq.com
感谢 :非常感谢您的查阅,如果您在调试的时候出现问题可以联系宝宝哦!
*/
//这个函数是把M个球,随机放到N个箱子里面
//具体做法就是穷举,也就是把所有情况穷举出来,就是用for循环
//所有情况下的一个是把指定 M个球放到N个箱里,
//也就是说N个箱每个箱都最少有一个球,这个功能由int fun(int m,int n);完成
//把 1个 ,2个, ·····n个的情况相加
int f(int m,int n)
{
int sum = 0;
int i=1;
if(n>m) n=m;
if((m==1)||(n==1)) return 1;
for(i=1;i<=n;++i)
sum+=fun(m,i);
return sum;
}
//也就是说N个箱每个箱都最少有一个球
//也就是说把M个球必须放到N个箱里
//第一步就是把M个球拿出N个放到N个箱里,每一个箱子一个
//第二部是把剩下的M-N个 随机放到N个箱子里
int fun(int m,int n)
{
if((n==1)||(n==m))return 1;
return f(m-n,n);
}
int main()
{
cout << "分配方法数目 = " <<f(7,7)<< endl;
return 0;
}
/********************* 测试说明*************************************/
本程序在菜鸟教程的编辑器下编译,以下是截图。