【递推】POJ 1664 放苹果
来源:互联网 发布:网络创世纪 stones 编辑:程序博客网 时间:2024/05/21 19:41
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
1
7 3
Sample Output
8
f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,如果n>m,必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响;即if(n>m) f(m,n) = f(m,m)。当n<=m时,不同的放法可以分成两类:即有至少一个盘子空着或者所有盘子都有苹果:1、前一种情况相当于f(m,n) = f(m,n-1);2、后一种情况可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n)。3、而总的放苹果的放法数目等于两者的和,即f(m,n) =f(m,n-1)+f(m-n,n)。出口条件说明:当n=1时,所有苹果都必须放在一个盘子里,所以返回1;当没有苹果可放时,定义为1种放法;递归的两条路,第一条n会逐渐减少,终会到达出口n==1; 第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0:
#include<iostream>using namespace std;int apple(int a,int b){ if(b==1||a==0)return 1; if(a<b)return apple(a,a); else return apple(a,b-1)+apple(a-b,b);}int main(){ int t,m,n; cin>>t; while(t>0) { cin>>m>>n; cout<<apple(m,n)<<endl; t--; } return 0;}
0 0
- POJ 1664 放苹果 递推
- poj 1664 放苹果(递推)
- poj 1664 放苹果(递推)
- poj 1664 放苹果(递推)
- 【POJ 1664】【递推】放苹果
- POJ 1664 放苹果(经典递推)
- poj 1664 放苹果 (递推)
- 【递推】POJ 1664 放苹果
- POJ,北大OJ,1664 ,放苹果。递推解法。。。
- poj 1664 递推(盘子放苹果)
- POJ 1644 放苹果 递推 递归
- pku-1664 放苹果(递推)
- poj 1664 放苹果(递推,记忆化搜索)简单题
- 递归及递推问题系列之 放苹果 poj 1664
- 小白算法练习 poj 1664 放苹果 整数拆分 递推
- POJ1664 放苹果【递推】
- poj 1664 放苹果
- poj 1664 放苹果
- ISO-8859-1,ASCII,Unicode,UTF-8,UTF-16,GB2312,GBK,DBCS编码
- Java EE基础之JSP(二)
- libcudart.so.6.5 cannot open shared object file: no such file or directory
- java 统计十个学生成绩
- Java中的类、方法、属性的命名规则
- 【递推】POJ 1664 放苹果
- isHiden和isVisible的区别(isVisible更可靠)
- HDU
- Activity背景透明
- 贪心算法--过河问题
- 2,3 c++中 #include< >头文件 和 命名空间 Using namespace std的解释和区别
- 如何在git中删除指定的文件和目录
- leetcode 59. Spiral Matrix II (螺旋矩阵)
- linux c/c++知识点整理(三)