m个苹果放入n个盘子
题目描述
放苹果问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
(注:5,1,1和1,1,5是同一种分法)
解题分析:
设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,
当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类:
1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);
2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
递归出口条件说明:
当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
当m==0(没有苹果可放)时,定义为1种放法;
递归
int fun(int m,int n) //m个苹果放在n个盘子中共有几种方法
{if(m==0||n==1) //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,return 1; //则可能出现m-n=0的情况从而不能得到正确解 if(n>m)return fun(m,m);elsereturn fun(m,n-1)+fun(m-n,n);
}
动态规划
//放苹果
int main() {int apple, plate;cin >> apple >> plate;if (apple < 0 || apple > 10 || plate < 1 || plate > 10) {cout << -1 << endl;return -1;}vector<vector<int> > ivec(11, vector<int>(11, 0));for (int i = 0; i < 11; i++) {ivec[0][i] = 1;ivec[i][1] = 1;}for (int i = 1; i <= 10; ++i) {for (int j = 1; j <= 10; ++j) {if (j <= i)ivec[i][j] = ivec[i][j - 1] + ivec[i - j][j];elseivec[i][j] = ivec[i][i];}}cout << ivec[apple][plate] << endl;return 0;
}
m个苹果放入n个盘子相关推荐
- 递归算法《M个苹果放入N个盘子》
题目: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
- 将m个苹果放入n个盘子的问题【转】
来自:http://blog.csdn.net/qq675927952/article/details/6312255 问题1: m----->相同, n---> 相同,可为空 将m个苹果 ...
- 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> ...
- 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...
- [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小编,每天都会在上面存放各种文档,图片等一些文件,不管屏幕有多大,很快就会堆积大量的文件在桌面上,可是又懒得或没时间去规整他们,那该怎么办? ...
- 记录 vue项目打包放入 hbuilder 做app真机测试时 无法请求后台服务接口
1.因为发布app时 vue开发模式下配置的跨域是无效的,打包后会找不到接口 例如下面是之前的错误版: '/propertyCmsAPI': {target: 'http://192.168.1.11 ...
最新文章
- codeforces 374A Inna and Pink Pony 解题报告
- 解决kubectl get pods时 No resources found.问题
- php 7.1/7.3使用 json_encode 函数造成浮点类型数据出现精度问题
- webstorm设置文件类型
- SharePoint 2013 - System Features
- SynchronizationContext
- 第1步 新建spring+springmvc+mybatis项目 每步都有 讲解 巨详细
- 在python中查看关键字、需要执行,如何在一个文本文件,二进制执行搜索来搜索一个Python关键字?...
- ubuntu linux安装ftp,Ubuntu16.04安装vsftpd教程,Linux系统FTP安装
- win7 x64从IE10升级IE11失败
- wow修改人物模型_跪求WOW改人物模型和装备模型的工具
- uni-app使用i18n实现国际化/多语言配置
- python写的串口助手_Python实现的简单的单片机串口助手程序
- 2020年《财富》世界500强排行榜揭晓
- 工作室SWS自动化脚本
- java.lang.RuntimeException: java.lang.NoSuchMethodException: com.xxx.analy
- 如何面对工作中的困难和纠结
- ubuntu时间自动同步服务器,Ubuntu从NTP服务器同步时间
- ACM数论 裴蜀定理(贝祖定理)
- Vue联动下拉框默认选中