poj 1664 放苹果(递归)
来源:互联网 发布:怎样注册网站域名 编辑:程序博客网 时间:2024/06/06 04:46
题目: 将m个苹果放入n个篮子中,允许有篮子空着,请问一 共有几种放法?(注意:不能出现重复的放法)
输入: 第一行输入需要测试的次数t, 0<=t<=20。第二行输入苹果的数量m和篮子的数量n,1<=m,n<=10。
输出: 输出一共有几种放法。
试例: Input:
1
7 3
Output:
8
分析: 首先,苹果和篮子的关系一共有三种,m>n, m<n, m=n. 当m>n时:苹果放进篮子有两种情况,有空篮子和没有空篮 子。 有空篮子时,可以先规定有一个空篮子,则苹果的放法为placing(m,n-1),依次类推,就可得出该情况下共有几种 放法。 没有空篮子时,每个篮子至少有一个苹果,所以此时的放法为placing(m-n,n),即可得出该情况下有多少种放法。m<n时:因为苹果的数量小于篮子的数量,所以此时一定有空篮子。所以 此时的放法和n个苹果放进n个篮子是一样的,即placing(n,n)。m=n时: 此时也有两种情况,每个篮子里面都有一个苹果和至少有一个篮子时空的,所以此时的放法为placing(m,n-1)+1;
#include<iostream>using namespace std;int placing(int m,int n) //计算共有几种放法{ if(m==1||n==1)//当只有一个苹果或只有一个篮子时,放法都是一种,即所有的苹果都放在同一个篮子里面 { return 1; } else if(m>n)//当m>n时 { return placing(m,n-1)+placing(m-n,n); //有空篮子时的放法加上没有空篮子时的放法,有空篮子时先假设有一个空篮子后依次类推,没有空篮子时先每个篮子放一个,再将剩下的放进篮子 } else if(m<n) { return placing(n,n);//m<n时的放法和n个篮子放n个苹果的放法相同 } else if(m==n) { return 1+placing(m,n-1);//每个篮子放一个和至少有一个空篮子 }}int main(){ int m,n; int t; cin>>t; for(int i=0;i<t;i++) { cin>>m>>n; cout<<placing(m,n)<<endl; } return 0;}
阅读全文
0 0
- POJ 题目1664 放苹果(递归)
- poj 1664 放苹果(递归)
- POJ 1664 放苹果 (递归)
- POJ 1664 放苹果(递归)
- POJ:1664 放苹果(递归,思维)
- poj 1664 放苹果(递归)
- poj 1664 放苹果 递归
- POJ 1664 放苹果(递归或DP)
- poj--1664--放苹果(递归好体)
- POJ 1664 /NYOJ 758 放苹果问题(递归)
- 经典递归问题--放苹果POJ【1664】
- POJ 1664 放苹果【DFS/递归】
- POJ-----1664---放苹果---递归 思维
- POJ 1664放苹果(递归问题)
- POJ-1664 放苹果(递归的运用)
- 放苹果(递归)
- 放苹果(递归)
- 放苹果(递归)
- 标题真难起
- Tomcat处理静态文件DefaultServlet分析(转载)
- Rank HDU
- LeetCode刷题(1)
- 第九篇:磨刀不误砍柴工:VS2010的使用小技巧(转载)
- poj 1664 放苹果(递归)
- mysql 命令行启动出现不是内部命令
- linux 下的redis 安装
- python趣事-3-ip代理
- C语言变长数组的学习心得
- Oracle 动态执行存储过程
- 使用POI创建EXCEL
- Android Badge徽章框架
- Redis缓存技术学习系列之Lua脚本