排列组合 n个球放入m个盒子算法 总结
问题:
总结 https://blog.csdn.net/qwb492859377/article/details/50654627
N个球放M个盒子问题 https://blog.csdn.net/zwz_511/article/details/46240927
算法:
HDU - 6397 Character Encoding 插板法+容斥原理 https://blog.csdn.net/xiang_6/article/details/81868989
[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子) https://blog.csdn.net/sr_19930829/article/details/38293297
m个相同的bean和n棵不同的树,每棵树可以放也可以不放beans https://blog.csdn.net/moon_sky1999/article/details/81835284
n个球放入m个盒子,使用程序输出所有的放法? https://www.zhihu.com/question/51448931
递归解
#include<iostream>
using namespace std;
void Select(int i,int j,const int m,int *x,int &num){//i为第i个盒子。0<=i<=m-1。j是剩余球数。x为放置球的解法,num可有可无,记录放置的方法数目。if (i > m)return;if (j == 0){num++;cout << "x可行序列为 : (";for (int i = 0; i < m; i++){cout << x[i];if (i != m - 1)cout << ",";elsecout << ")" << endl;}return;}for (int k = j; k >= 0; k--){if (i == m)return;x[i] = k;Select(i + 1, j - k, m, x,num);x[i] = 0;}
}
int main(){int num = 0;int m = 5, n = 3;int x[5] = { 0 };Select(0, n, m, x,num);cout << "共 " << num << "种" << endl;return 0;
}
r用于记录当前的结果,p是写入该缓存的位置。那么f(r,p,n,m)的意义就是把n个球放入m个盒子。如果只有一个盒子就打印结果,>1个盒子就放入0至n个球到当前盒子,余下的球和盒子递归调用f()
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
题意:
a1 + a2 + ... + am = k , 0 <= ai < n; 给定n m k 问:上述式子成立的种类数有多少,1+2=3 和 2+1=3 是两种情况
思路:
说到这个题必须要说的是组合数学的隔板法:
①k个相同的小球放入m个不同的盒子,每个盒子不为空的种类数:k-1个空隙中插入m-1个板子,C(k-1, m-1)
②k个相同的小球放入m个不同的盒子,可以允许有的盒子为空种类数:我们再加上m个球,按照①式不为空求解,因为分割完后,每个盒子减去1,就是当前问题的解,即:C(k-1+m, m-1);
对于本题,可以理解成k个相同的球放入m个不同的盒子,每个盒子可以为空,但是个数不能大于等于n;
正男则反,我们算总的减去大于等于n个情况的种类数,容斥一下、待更、、
#include<iostream>
using namespace std;
void Select(int i,int j,const int m,int *x,int &num){//i为第i个盒子。0<=i<=m-1。j是剩余球数。x为放置球的解法,num可有可无,记录放置的方法数目。if (i > m)return;if (j == 0){num++;cout << "x可行序列为 : (";for (int i = 0; i < m; i++){cout << x[i];if (i != m - 1)cout << ",";elsecout << ")" << endl;}return;}for (int k = j; k >= 0; k--){if (i == m)return;x[i] = k;Select(i + 1, j - k, m, x,num);x[i] = 0;}
}
int main(){int num = 0;int m = 5, n = 3;int x[5] = { 0 };Select(0, n, m, x,num);cout << "共 " << num << "种" << endl;return 0;
}
排列组合 n个球放入m个盒子算法 总结相关推荐
- 排列组合 n个球放入m个盒子问题 总结
算法: HDU - 6397 Character Encoding 插板法+容斥原理 https://blog.csdn.net/xiang_6/article/details/81868989 [ ...
- 排列组合 “n个球放入m个盒子“里,再来一遍
1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n<m 使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙 ...
- 排列组合 n个球放入m个盒子m问题 总结
求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n<m 使用插 ...
- 排列组合 “n个球放入m个盒子m“问题 总结
求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n 使用插板法:n个 ...
- n个小球放入m个盒子中_【转】排列组合 n个球放入m个盒子m问题 总结
球,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n 使用插板法:n个 ...
- 排列组合问题 “n个球放入m个盒子(8种)”
1.球相同,盒相同,允许空箱 2.球相同,盒相同,无空箱 3.球相同,盒不同,无空箱 4.球相同,盒不同,允许空箱 5.球不同,盒相同,无空箱 6.球不同,盒相同,允许空箱 7.球不同,盒不同,无空箱 ...
- 算法题(模板)——N个球放入M个盒子中
题目:n个球放入m个盒子中,有多少种放法 情况一:球同,盒不同,无空盒 也就是所有球都是一样的,但是盒子有区别,且不能出现空放的情况. 采用插板法,相当于在n-1个空隙中,插入m个盒子,而由于不能有空 ...
- n个小球放入m个盒子中_联考数学复习指导:M个球放入N个盒子
为了广大学员能够更好的备考2015年考研, 特收集了联考数学指导:M个球放入N个盒子,希望对各位考生有所帮助. M个球放入N个盒子的放法 N个盒子编号为1到N, 把M个相同的球放入这N个不相同的盒子, ...
- n个小球放入m个盒子中_M个球放入N个盒子的放法
M个球放入N个盒子的放法 1.N个盒子编号为1到N, 把M个相同的球放入这N个不相同的盒子,问共有多少种放法. M个球分成了N组,即装入N个盒子.如果要求每个盒子至少有一个球,则要求M>=N. ...
最新文章
- 你们可能都小看了Windows!
- python什么是交换算法_python算法-015将链表元素两两交换元素(交换值、就地翻转)...
- VC++动态链接库(DLL)编程深入浅出
- PADS Layout的一个鼠标小技巧
- linux 软raid配置-系统安装
- git复制迁移--SmartGit
- html5从基础到入门,Html5从入门到精通系列2:Html5基础
- 伦敦大学学院计算机残疾,伦敦大学学院残疾、设计和创新理学硕士
- 中国量子技术产出居世界第二 英国量子技术未来5个发展方向
- Gps开发实战——卫星数量获取
- OpenWrt 无线桥接
- InstallShield Limited Edition Project下载及进行打包发布汇总
- xThunder —— 完美支持Firefox的迅雷,旋风调用扩展
- 道路交通车路协同信息服务通用技术要求
- python股票代码示例_补全股票代码位数的一百种姿势
- 制作双启动(传统BIOS与UEFI均可引导的U盘)
- 大学四年学习生活成长总结
- 62-Mybatis高级介绍
- login主页面+接口+依赖
- readlink 获取进程的绝对路径