华为OJ之放苹果
题目描述:
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。<=n<=10<=m<=10
样例输入
7 3
样例输出
8
题目分析:
本题实际上是一个划分问题,借助于递归这个强大的工具,我们可以比较容易地进行解决,具体分析思路如下:
1,我们用f(m, n)来表示m个苹果,n个篮子的情况;
2,出口条件:当m <= 1时f(m, n) = 1, 当n = 1时f(m, n) = 1;
3,当n > m时,无论怎么放置,总会有(n - m)个篮子为空,那么去掉这些篮子也不会对总的放置种类有什么影响,即f(m, n) = f(m, m);
当 n <= m时,又分为两种情况:
3-1,所有的篮子都不会为空,此时相当于每个篮子都至少会有一个苹果,那么去掉这些苹果,总的放置种类也不会改变,即即f(m, n) = f(m - n, n);
3-2,至少有一个篮子不会为空,那么去掉这个篮子,总的放置种类也不会改变,即即f(m, n) = f(m, m - 1);
那么总的放置种类数相加即可。
4,根据3中的分析,递归过程中f(m, n)参数1和参数2都会不断减小,一定会到达出口条件,符合递归的条件。
代码(Java实现):
import java.util.Scanner; public class layApple {
public static void main(String[] args) {
int[] paras = getInput();
System.out.println(findNumsOfLaying(paras[0], paras[1]));
}
public static int[] getInput() {
@SuppressWarnings("resource")
Scanner reader = new Scanner(System.in);
int[] paras = new int[2];
paras[0] = reader.nextInt();
paras[1] = reader.nextInt();
return paras;
} public static int findNumsOfLaying(int m, int n) {
if (m == 0 || n == 1) {
return 1;
}
if (n > m) {
return findNumsOfLaying(m, m);
} else {
return findNumsOfLaying(m - n, n) + findNumsOfLaying(m, n - 1);
}
}
}
华为OJ之放苹果的更多相关文章
- 华为OJ平台——放苹果(典型整数划分问题)
题目描述: 输入m,n,分别表示苹果数与盘子的总数,要求输出苹果放在n个盘子的方法总数(注意511和151是一种情况),例如输入 7 3 输出8((7),(6,1),(5,2),(4,3),(5,1, ...
- 华为OJ:2041 放苹果
这道题难点不在于代码怎么写,而是思路怎么想. 感觉一般这样的题要么你理好一个思路要么你最后总结出一个公式,要么你自己模拟它的运作方式,用迭代,或者递归的方式来做. 有点像我们曾经学的排列组合. 对于m ...
- 华为OJ之放砝码
题目描述: 现有一组砝码,重量互不相等,分别为m1.m2--mn:他们可取的最大数量分别为x1.x2--xn.现在要用这些砝码去称物体的重量,问能称出多少中不同的重量. 注: 称重重量包括0: 要对输 ...
- oj放苹果
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
- openjudge666:放苹果—题解
(测试这里的markdown,同时也有纪念意义吧--第一次写的题解) 当时刚学递推的时候做的一道题 oj上的666题 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M ...
- OpenJudge 666:放苹果 // 瞎基本DP
666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1 ...
- 华为OJ:火车进站
火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...
- POJ 1664 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24985 Accepted: 15908 Description ...
- 华为荣耀6PLUS 秒杀苹果
华为荣耀6PLUS 秒杀苹果. [ az09 ] 于:2015-02-21 12:36:47 复:4036020 刚入手华为荣耀6PLUS,双4G版,在温哥华使用,效果很好. 首先很漂亮,感觉去掉HO ...
随机推荐
- 【小练习04】HTML+CSS--医药健康小页面
要求实现如下效果图: 代码演示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- 一天搞定CSS:边框border--02
每一个标签都是一个盒子,具体见HTML教程 因此,每一个标签有大小,有边框 1.border样式:单一样式 2.border样式:复合样式 border: 粗细 类型 颜色: 3.border方向 4 ...
- 利用Excel做一些简单的数据分析
先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...
- Hibernate入门(三)
一 Hibernate生成器类 Hibernate中,标签id中的generator标签用于生成持久化类对象的唯一标识.所有的生成器类都实现了org.hibernate.id.IdentifierGe ...
- linux中常用的命令
1.向某个ip发送文件 scp name.tar root(身份)@ip:/lujing 2.重启系统 init 6 3.如果修改了ifcfg-eth0类似于网卡配置文件,修改网口,ip等设置: 需要 ...
- 关于EasyUI中的Tree
2017年6月21日,天气阴.心情比较沉重. 近期由于毕设的事情,三周不写代码了.这周测试提交了一些BUG,于是开始着手处理,还真的是熟能生巧,三周的功夫就感觉有点生疏.其中有一个BUG就是角色对应的 ...
- CentOS yum 安装 PHP 5.6.24
配置yum源 追加CentOS 6.5的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel- ...
- cache 和 buffer的区别
cache 和 buffer的区别: Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器.由于CPU的速度远高于主内存, CPU直接从内存中存取数据要等待一定时间周期,Cac ...
- [编织消息框架][netty源码分析]11 UnpooledHeapByteBuf 与 ByteBufAllocator
每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...
- 我的学习之路_第二十三章_HTML
Html : 超级文本语言 ( Hyper text Markup Language ) HTML 文件扩展名是 * .html HTML 结构都是有标签组成 通常情况下标签有开始标签和结束标签组成 ...