把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)
5
,
1
,
1
和
1
,
5
,
1
是同一种分法。
输入
每个用例包含二个整数M和N。
0
<=m<=
10
,
1
<=n<=
10
。<=n<=
10
<=m<=
10
样例输入
7
3
样例输出
8
分析:对于m个苹果,n个盘子f(m,n),如果苹果个数比盘子少,那么就跟n个盘子,n个苹果是一样的f(n,n)。如果m比n大,那么有两种情况,一种有空盘子的情况,一种没有空盘子的情况,两种情况不重叠且加一起一定为情况总数。第一种情况就即为n个盘子放在m-1个盘子里,因为至少有个空盘子。f(m,n-1),第二种情况下,每个盘子都有一个苹果了,就相当于f(m-n,n),m扣掉n个苹果再放到n个盘子里。得到递归式f(m,n)=f(m,n-1)+f(m-n,n)。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int m=sc.nextInt();
int n=sc.nextInt();
System.out.println(count(m,n));
}
sc.close();
}
public static int count(int m,int n){
if(n<=0||m<0){return -1;}
if(m==0||m==1||n==1){return 1;}
if(m<n){
return count(m,m);
}else return count(m-n,n)+count(m,n-1);
}
}