题目:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种走法?5,1,1和1,5,1是同一种走法。
第一行是测试数据的数目t(0<=t<=20),以下每行均包含两个整数M和N,以空格分开。1<=M,N<=10.
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1
7 3
样例输出
8
思路
把m个苹果放在n个盘子里方法总数是f(m,n),
首先思考m和n的关系,
如果m<n的话,就是说盘子有多出来的,又因为我们盘子都是相同的,不同顺序是没区别的,所以就可以把m-n个盘子搁到一边,那么剩下的问题就是把m个苹果放到m个盘子里面去,即当n>m时,f(m,n)=f(m,m)。
如果m>=n,那么就应该把所有的算法分类,分成有盘子空着的算法和没有盘子空着的算法。
1、有盘子空着的算法:
至少有一个盘子为空,那么就把这个盘子搁置到一边去,所以f(m,n)=f(m,n-1)
2、没有盘子空着的算法:
那么没一个盘子至少都有一个苹果,所以就相当于起始状态从每个盘子都是空着的转换成每个盘子都有一个苹果,然后在开始计算方法。所以f(m,n)=f(m-n,n)(m-n的意思是m减去每个盘子的一个苹果)
边界条件
当没有苹果时,即m=0时,表示所有盘子都不放苹果这也是一种方法,所以返回1
当没有盘子时,即有苹果没有盘子放,所以返回0