POJ1664 放苹果问题(递归)
目录
POJ1664 放苹果问题(递归)
一、 递归简介
二、 题目描述
三、 输入、输出格式
四、输入输出样例
五、题目分析
六、测试代码
一、 递归简介
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
二、 题目描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
三、 输入、输出格式
1.输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
2.输出
对输入的每组数据M和N,用一行输出相应的K。
四、输入输出样例
输入样例:
输出样例:
五、题目分析
- 有反复执行的过程(调用本身)
第一种情况n>m : 必定有 n-m 个盘子空着,去掉不影响。
第二种情况n<=m :
i,有至少一个盘子空着;
ii,每个盘子都有苹果;
总的放苹果的方法数为两者之和; - 有跳出反复执行过程的条件(递归出口)
当苹果放完或者只有一个盘子的时候
*递归两条路:
i,n会逐渐减少,最终到达出口 n1 ;
ii,m逐渐减少,因为n>m时,return work(m,m),所以终会到达出口 m0;
六、测试代码
#include<iostream>
using namespace std;int work(int m , int n){if(m==0||n==1)return 1;if(n>m)return work(m,m);elsereturn work(m,n-1)+work(m-n,n);
}int main(){int t , m , n ;cin>>t;while(t--){cin>>m>>n;cout<<work(m,n)<<endl;}return 0;
}
POJ1664 放苹果问题(递归)相关推荐
- POJ1664 放苹果【递推+记忆化递归】
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35209 Accepted: 21792 Description ...
- c语言 10分苹果,POJ1664 放苹果 递归 C语言
Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 ...
- POJ-1664 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21021 Accepted: 13395 Description ...
- poj1664(放苹果)
题目链接:http://poj.org/problem?id=1664 关于放苹果的那些事.......... 今天偶然看到一个关于整数划分的算法, 仔细看了后,我想到了放苹果的事,其实这个问题困扰了 ...
- [POJ1664] 放苹果 (动态规划,组合数学)
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试数据的数目t(0 <= ...
- 机试:放苹果(递归问题)
通过者的解读 设dp(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论, 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响.即if(n>m ...
- 43.放苹果(递归练习)
放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分 ...
- POJ 1664 放苹果(递归或DP)
一.Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t ...
- 【信息学奥赛一本通】1206:放苹果(递归)
解题思路:这道题如果直接去解就很难去想,那么我们就可以尝试使用递归的方式将问题规模减小,将复杂的问题交给计算机去解决. 首先,我们很容易的可以发现递归的边界,当只有一个盘子的时候就只有一种解法.如果没 ...
最新文章
- oracle 使用nfs挂载的目录不能进行归档
- float php 运算_系统的讲解 - PHP 浮点数高精度运算
- LeetCode448-找到所有数组中消失的数字(原地数组)
- 读取图片测试_精品:固态硬盘进阶知识:寿命篇:(一)22TB地狱级写入测试...
- 软件测试用例设计练习
- MATLAB实现短时傅里叶变换
- 私域运营是不是就是社群运营?
- c语言中错误c2084,错误_C2084_函数“int multi(int)”已有主体
- 标注数据类型及对应的监督学习方案
- Shell脚本自动化部署实战(一)
- ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!
- pythonapp自动化_基于python的App UI自动化环境搭建
- 计算机领域模范,喜报 | 我院陆品燕教授获2020年上海市“劳动模范(先进工作者)”称号...
- Photon在unity中的使用
- linux安装x264
- HDMI 数据包简析
- 怎样用c语言禁止鼠标滑轮,如何禁用鼠标滚轮-禁用鼠标滚轮的教程 - 河东软件园...
- python 基础系列(十二) — python正则
- redis-->RedisTemplate的API
- 《草根》2期6月初发布