【递归】P2386放苹果
题目相关
题目描述
把 m个同样的苹果放在 n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。(5,1,1 和 1,1,5 是同一种方法)
输入格式
第一行是测试数据的数目 t,以下每行均包括二个整数 m和 n,以空格分开。
输出格式
对输入的每组数据 m和 n,用一行输出相应的结果。
输入输出样例
输入1
1
7 3
输出 1
8
输入 2
3
3 2
4 3
2 7
输出 2
2
4
2
说明/提示
对于所有数据,保证:\(1\leq m,n\leq 10,0 \leq t \leq 20\)。
原题链接
P2386 放苹果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析
首先阅读题目,发现这题特殊在有的盘子能够空着不放。那么,分类讨论下,对于摆放的情况,就有可能出现所有盘子都有苹果或者是有盘子空着不放两种情况。
我们先设计这样一个函数fun(m,n)他的作用就是返回m个苹果放n个盘子中的方法数。接着,继续来讨论苹果的分配情况。
首先,如果苹果的数量少于盘子的数量,那么最多也就用上和苹果数量相同的盘子,剩下的盘子就用不上了。那么就相等于,m个苹果放在m个盘子中的分法。
接着,如果苹果数量比盘子数量多,那么就会出现最开始讨论的两种情况,一是每个盘子都有苹果,二是有的盘子空着不放。那么只要分别求出这两种情况对应的放法数,两者相加就能得到答案了。
先考虑下,每个盘子都放有苹果的情况,这样的话,每个盘子中就至少会有一个苹果存在,那么剩下的苹果分配放法就是盘子放满的放法数。\(fun(m,n)放满=fun(m-n,n)\)。
再来考虑。有盘子会空着不放的情况。他有可能是一个空盘,或两个空盘,或更多的空盘。而不论空几个盘子,他们都至少会空出一个盘子出来,那么这个空出来的盘子就没用了,也就相当于把苹果分配到n-1个盘子中。\(fun(m,n)有空盘=fun(m,n-1)\)。
由此,总结下:
fun(m,n)=\left\{
\begin{array}{rcl}
fun(m,m) & & {m<n}\\
fun(m-n,n)+fun(m,n-1) & & {m\ge n}
\end{array}
\right.
\end{equation}
\]
这样一分析,就能发现很明显的递归过程了。递归实现的两个要点1. 递归过程 2. 终止条件。递归过程有了,那么再来想想终止条件应该是什么,观察我们找到的解决方法,发现是苹果的数量和盘子的数量在不断减少,那么肯定是不可能无止境的少下去的,那么就想想少到什么时候会有显而易见的答案呢?盘子如果,只有一个,那么肯定就只有一种放法,苹果只有一个或者说零个,那么也只有一种放法。由此,就得到了递归的终止条件。再整合下:
fun(m,n)=\left\{
\begin{array}{rcl}
1 & & m = 0 \| m=1 \| n=1 \\
fun(m,m) & & {m<n}\\
fun(m-n,n)+fun(m,n-1) & & {m\ge n}
\end{array}
\right.
\end{equation}
\]
代码实现
#include<iostream>
using namespace std;
int t,M,N;
int apple(int m,int n){
if(m==1||n==1||m==0){// 终止条件
return 1;
}
if(m>=n){//苹果比盘子多
return apple(m,n-1)+apple(m-n,n);
}else{//苹果比盘子少
return apple(m,m);
}
}
int main(){
cin>>t;
for(int i=0;i<t;i++){
cin>>M>>N;
cout<<apple(M,N)<<'\n';
}
return 0;
}

视频链接
https://www.bilibili.com/video/BV1ep4y1r7an
【递归】P2386放苹果的更多相关文章
- 洛谷——P2386 放苹果
P2386 放苹果 题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入 ...
- 洛谷 P2386 放苹果
P2386 放苹果 题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入 ...
- P2386 放苹果
题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试 ...
- poj1664放苹果(递归)
题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- 放苹果(poj1664递归)
ti放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24392 Accepted: 15513 Descripti ...
- 递归--练习4--noi666放苹果
递归--练习4--noi666放苹果 一.心得 写出状态后勇敢假设 二.题目 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允 ...
- poj 1664放苹果(递归)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37377 Accepted: 23016 Description ...
- poj 1664 放苹果 递归
题目链接: http://poj.org/problem?id=1664 题目描述: 有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式? 解题思路: 当前有n个苹果,m个 ...
- oj放苹果
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m< ...
随机推荐
- Leetcode学习笔记(2)
题目1 ID面试题 01.04 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. 示例 ...
- 乌云1000个PHP代码审计案例(1)
前两天发现的宝藏网站:https://php.mengsec.com/ 在github上面找到了源代码:https://github.com/Xyntax/1000php,可以在自己的服务器上面搭建 ...
- python xlsxwriter创建excel 之('Exception caught in workbook destructor. Explicit close() may be required for workbook.',)
python2.7使用xlsxwriter创建excel ,不关闭xlsxwriter对象,会报错: Exception Exception: Exception('Exception caught ...
- WebRequest抓取网页数据出现乱码问题
今天项目里突然有个功能用不起来了,本机确实好的 ,这个很无语 不知道为啥 经过写日志发现html 变成了这样的东西,很是头疼,刚开始各种编码转换,发现这并不是编码的问题 后面观察目标网站多了一个gzi ...
- 题解 CF1375E Inversion SwapSort
蒟蒻语 这题是真的奇妙... 想了好久才想明白. 蒟蒻解 考虑冒泡排序是怎样的. 对于相邻的两个数 \(a_i, a_{i+1}\),如果 \(a_i>a_{i+1}\) 那么就交换两个数. 总 ...
- rsync 参数说明及使用参数笔记好文摘抄
一.前言 最近发现rsync挺好用的--不过参数有点多,所以这儿写一篇给自己以后要用的时候做个参考. 二.参数说明 这儿全是我翻资料连蒙带猜(有些实在是不好解释)翻译出来的,请各位转载的留个名啊,虽然 ...
- mysqldump: [ERROR] unknown variable 'database=test'.
背景: 导出数据库test库的test表数据出现报错信息:mysqldump: [ERROR] unknown variable 'database=test'. 原来是my.cnf参数文件配置了以下 ...
- 设置定时任务用rman删除归档日志脚本
之前使用数据库数据迁移过程中出现产生大量归档日志的情况(由于迁移的目标库是DG,必须开启归档). 为避免出现归档空间爆掉的情况,设置定时任务删除系统当前时间30分钟前的归档日志,脚本如下: cat d ...
- 【QT】多个槽函数绑定同一个信号的触发顺序
目录 一.Qt 3.0(包含3.0) - Qt 4.5(包含4.5)版本之前 二.Qt 4.6(包含4.6)版本之后 一.Qt 3.0(包含3.0) - Qt 4.5(包含4.5)版本之前 「多个槽函 ...
- css做keylogger
下载keylogger:https://github.com/maxchehab/css-keylogging 参考讲解:https://blog.csdn.net/weixin_34138139/a ...