华为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 ...
随机推荐
- JavaSE教程-02Java基本语法
1.注释 什么是注释 用于解释说明程序作用的文字 Java中注释分类格式 单行注释 格式: //注释文字 多行注释 格式: /* 注释文字 */ 文档注释 格式:/* 注释文字 / 2.关键字 什么是 ...
- asp.net core教程 (二)
Asp.net Core环境设置 Asp.net Core环境设置 安装Microsoft Visual Studio 2015 Asp.Net Core是Asp.Net的一个重大的重新设计. 这个话 ...
- Hybrid App开发之jQuery基础
前言: 前面学习了JavaScript/Html/Css的基础知识,今天学习一下常用js框架jQuery的使用进行快速的开发. JQuery的基本功能: 方位和操作DOM元素 控制页面样式 对页面事件 ...
- Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)
JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03 xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...
- net core 程序docker打包镜像并发布到官方store
学习一个技术的第一步,总是要先打印或显示一个hello world的.当然,学习docker也不例外.上一篇文章已经简单的介绍了环境的安装和配置.接下来就要打印我们的hello world了. 首先我 ...
- Sql Server日期时间格式转换
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...
- bootstrap-table前台和后台分页对json格式的要求
Bootstrap是一款前端非常流行的框架,其中的表格更为大家经常使用.大家都知道表格的分页分为前台和后台分页,也就是表格配置中sidePagination属性,当sidePagination: &q ...
- CSS input type="number"出现上下箭头时解决方案
input type="number"时录入内容不可控制,解决方案是在css中添加//火狐input[type=number] { -moz-appearance:tex ...
- Android高仿qq及微信底部菜单的几种实现方式
最近项目没那么忙,想着开发app的话,有很多都是重复,既然是重复的,那就没有必要每次都去写,所以就想着写一个app通用的基本框架,这里说的框架不是什么MVC,MVP,MVVM这种,而是app开发的通用 ...
- Tornado+MySQL模拟SQL注入
实验环境: python 3.6 + Tornado 4.5 + MySQL 5.7 实验目的: 简单模拟SQL注入,实现非法用户的成功登录 一.搭建环境 1.服务端的tornado主程序app.py ...