将m个苹果放入n个盘子的问题【转】
来自:http://blog.csdn.net/qq675927952/article/details/6312255
问题1:
m----->相同, n---> 相同,可为空
将m个苹果放进n个盘子中,盘子允许空,有多少种方法。同时注意例如1、2和2、1这两种方案是一种方案。
思路:
其实这跟将一个整数m分成n个整数之和是类似的,
设f[m][n]为将m分成最多n份的方案数,且其中的方案不重复,每个方案前一个份的值一定不会比后面的大。
则有:f[m][n] = f[m][n - 1] + f[m - n][n];
= 1 // m== 0 || n == 1
= 0 // m < 0
f[m][n - 1]相当于第一盘子中为0,只用将数分成n - 1份即可。
因为0不会大于任何数,相当于f[m][n - 1]中的方案前面加一个为0的盘子,
而且不违背f的定义。所以f[m][n - 1]一定是f[m][n]的方案的一部分,即含有0的方案数。
f[m - n][n]相当于在每个盘子中加一个数1。因为每个盘子中加一个数1不会影响f[m][n - 1]中的方案的可行性,也不会影响f的定义。
所以f[m - n][n]一定是f[m][n]的方案的一部分,即不含有0的方案数。
问题2:
问题描述:将整数N分成K个整数的和 且每个数大于等于A
小于等于B 求有多少种分法
1 int Dynamics(int n, int k, int min) //将n分为k个整数 最小的大于等于min,最大不超过B 2 { 3 4 if(n < min) return 0;//当剩下的 比min小,则不符合要求 返回0 5 if(k == 1) return 1; 6 int sum = 0; 7 for(int t = min; t <= B; t++) 8 { 9 sum += Dynamics(n-t, k-1, t); 10 } 11 return sum; 12 13 }
问题3:
m----->相同, n---> 相同,不能为空
将m个苹果放进n个盘子中,有多少种方法。同时注意例如1、2和2、1这两种方案是一种方案。
思路:
先把每个都放一个苹果,这样问题就转化为:m-n个苹果放进n个盘子里,盘子允许空,即问题1
问题4:
第一类Stirling数是有正负的,其绝对值是包含n个元素的集合分作k个环排列的方法数目。
递推公式为,
S(n,0) = 0, S(1,1) = 1.
S(n,k) = S(n-1,k-1) + (n-1)S(n-1,k)。
n个元素的集合分作k个环排列的方法是s(n,k),那么
1.可由前n-1个元素k-1个环的s(n-1,k-1); 即最后一个元素为单环,前n-1个构成k-1环;
2.第n个元素一定不是单环,可以由n-1个元素k个环,把第n个数任意的放入一个环中组成新环!即得到n个
元素的集合分作k个环,假设n个元素的集合分作k个环,那么由于n,不在单环中,那么可以把n所在的环中把n
剔除,即得到了n-1个元素,k个环,即充分与必要性都得证!
因而:S(n,k) = S(n-1,k-1) + (n-1)S(n-1,k)。得证!
问题5:
第二类Stirling数是把包含n个元素的集合划分为正好k个非空子集的方法的数目。
//n->有区别,K->非空,没区别
递推公式为,
S(n,n) = S(n,1) = 1,
S(n,k) = S(n-1,k-1) + kS(n-1,k).
上面的递推式可以用组合证明:
一方面,如果将第n个元素单独拿出来划分成1个集合,那么方法数是S(n-1,k-1);
另一方面,如果第n个元素所在的集合不止一个元素,那么可以先将剩下的n-1个元素划分好了以后再选一个集合把第n个元素放进去,方法数是k*S(n-1,k);
有加法原理得证
问题6:
Bell数和Stirling数
B(n)是包含n个元素的集合的划分方法的数目。
集合的划分:非空,
B(0) = 1, B(1) = 1,
B(n) = Sum(1,n) S(n,k). 其中Sum(1,n)表示对k从1到n求和,
问题7:
当K是有区别的时候,则一般都要在没有区别的基础上乘以K的全排列。
转载于:https://www.cnblogs.com/huashanqingzhu/p/4036425.html
将m个苹果放入n个盘子的问题【转】相关推荐
- 递归算法《M个苹果放入N个盘子》
题目: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
- m个苹果放入n个盘子
题目描述 放苹果问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? (注:5,1,1和1,1,5是同一种分法) 解题分析: 设f(m,n) 为m个苹果,n个盘子 ...
- m个苹果放入n个盘子问题
题目: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
- POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
通过分类讨论,将规模较大的问题转换成规模较小的相同问题,学会"降维",将索引值不断降小,就可以递归求解 设f(m,n)为把m个苹果放到n个盘子中的方法数,m>=0,n> ...
- [ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25952 Accepted: 16509 Description ...
- 163邮箱苹果设置不成功_怎么样才能让自己服务器发出的邮件不被 Gmail、Hotmail、163、QQ 等邮箱放入垃圾箱...
链接:https://www.zhihu.com/question/19574247/answer/16747342 来源:胡逸 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. ...
- html文件设置成mac桌面,Mac软件教程:让你的Mac桌面放入无限多的文件
对于那些喜欢将各种文件放在桌面的 Mac 用户,比如PC6小编,每天都会在上面存放各种文档,图片等一些文件,不管屏幕有多大,很快就会堆积大量的文件在桌面上,可是又懒得或没时间去规整他们,那该怎么办? ...
- 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...
- 记录 vue项目打包放入 hbuilder 做app真机测试时 无法请求后台服务接口
1.因为发布app时 vue开发模式下配置的跨域是无效的,打包后会找不到接口 例如下面是之前的错误版: '/propertyCmsAPI': {target: 'http://192.168.1.11 ...
最新文章
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
- Python接口自动化测试框架(基础篇)-- 常用数据类型Number
- ora-01033:oracle initialization or shutdown in progress 解决方法
- python爬取贴吧所有帖子-Python实现的爬取百度贴吧图片功能完整示例
- Visual Studio 2010 Ultimate开发与测试敏捷特性
- 量子化学计算机理,几种化学反应机理的量子化学理论计算
- 深入理解计算机系统第四版_《深入理解计算机系统》读书笔记 —— 第一章 计算机系统漫游...
- sigar 网络 java_java-Sigar网络速度
- QCC3020/QCC3040 TWS耳机按键切换EQ,APP切换EQ功能实现
- ENSP简单建立直连路由线路
- 安卓手机版php服务器地址,Almp——安卓系统上搭建本地php服务器环境
- 复合型数据结构:C数组
- python做ui界面_从零开始创建UI
- android教案,android教学教案.doc
- 阿里云网盘内测资格申请-最新内测资格
- 【Excel】常用的excel表格操作
- 这次!38K,妥妥的
- [深度学习 - 发现有趣项目] masking-gan 人脸生成笑脸表情
- 点击验证码无法刷新,或只能刷新一次的问题
- 中国农村信用合作报:科技赋能 全面推进乡村振兴
热门文章
- javascript window Timing
- linux 设备/dev
- 1.4 Padding
- pandas.Series.quantile
- Windows server 2016简单部署DNS服务,正向查找和委派
- 阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > MQTT协议接入 >
- Docker学习总结(39)——简析容器、无服务器和虚拟机的安全性差异
- Git学习总结(9)——如何构建你自己的 Git 服务器
- mysql生活使用方法_MySQL Workbench使用教程
- redhat 添加ssh端口_Linux修改SSH远程登录端口 --服务器安全篇