【递归】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< ...
随机推荐
- Gif开发笔记(一):gif介绍、编译和工程模板
前言 实现gif图片的解码和生成. Gif 简介 GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平 ...
- ripple Failed to load resource: the server responded with a status of 404 (Not Found)
在VS2015中使用Cordova + typescript开发中,遇到个问题. 在javascript console 中提示: Failed to load resource: the serve ...
- Oracle函数:trunc、round、ceil和floor
1.trunc函数 1).trunc(date) 格式:trunc(date,fmt) trunc用于截取时间,即便你指定不同的格式类型,返回的类型始终都是时间类型. 示例: with dates a ...
- aspnetcore webapi 解决发布以后每隔一段时间请求变缓慢
项目:netcore webapi 3.1 平台:windows server 2008 r2 服务器:IIS 7.5 项目发布到IIS以后第一次请求特别慢大概7.8秒,然后每隔5分钟请求一次大概2. ...
- tornado 网页提交内容 展示内容作业
s2.py import tornado.ioloop import tornado.web text_list=[] class MainHandler(tornado.web.RequestHan ...
- common 模块的 context.py
1.context.py 是写正则表达式的,源码如下: import re#s 是目标字符串#dict 是替换的内容#找到目标字符串里面的标识符KEY,去d里面拿到替换的值#替换到s 里面去,然后仔 ...
- Swing01-概述
1.Swing概述 Swing百分之百由Java本身实现,是一套轻量级组件(完全由Java实现的组件叫做轻量级套件,依赖于本地平台的套件称之为重量级套件).Swing不再依赖于平台的GUI,因此真正做 ...
- druid数据源yml配置
application.yml配置 spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:33 ...
- Linux下修改禅道端自定义端口号
第一种方式 一. 首先,如果我们的服务器的80端口没有开放的话,那么我们就是只能修改Apache应用服务的端口了,其实非常简单,安装完成禅道后,在任意目录下输入命令: /opt/zbox ...
- python 的基本语法
python3 默认的编码格式 :utf-8 标识符: 1.可以是数字,字母,下划线组成 2.不能以数字开头 3.不能以保留字命名(保留字即是关键字,比如"print") 4.区分 ...