博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1664放苹果(递归)
阅读量:5338 次
发布时间:2019-06-15

本文共 1068 字,大约阅读时间需要 3 分钟。

放苹果
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 37377   Accepted: 23016

Description

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

Input

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

Output

对输入的每组数据M和N,用一行输出相应的K。

Sample Input

17 3

Sample Output

8

 

对于m个苹果,n个盘子f(m,n):

如果m<n,那么就跟m个盘子,m个苹果是一样的f(m,m)。

如果m>n,那么有两种情况:一种有空盘子的情况,一种没有空盘子的情况,两种情况不重叠且加一起一定为情况总数。

第一种情况:m个苹果放在n-1个盘子里,因为至少有1个空盘子,即f(m,n-1)

第二种情况:每个盘子都至少有一个苹果,m-n个苹果再放到n个盘子里,即f(m-n,n)。

由上面两种情况得到递归式f(m,n)=f(m,n-1)+f(m-n,n)。

 

#include
#include
using namespace std;const int maxm=10000;int m[maxm],n[maxm],k[maxm];//m是苹果树,n是盘子数int putApple(int m,int n){ if(m==0||n==1) return 1; else if(n>m) return putApple(m,m); else return putApple(m,n-1)+putApple(m-n,n);}int main(){ memset(k,0,sizeof(k)); int t; cin>>t; for(int i=1;i<=t;i++)//一次性输入 { cin>>m[i]>>n[i]; } for(int i=1;i<=t;i++)//一次性输出 { k[i]=putApple(m[i],n[i]); cout<
<

 

转载于:https://www.cnblogs.com/-citywall123/p/9510601.html

你可能感兴趣的文章
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>
C语言学习总结(三) 复杂类型
查看>>