标签:
设f(m,n)为把m个苹果放到n个盘子中的方法数,m>=0,n>=0.
若m和n中任何一个等于0,那么f(m,n) = 1,注意不是等于0,因为相当于就那么一种结果,就是不往盘子里面放(没有苹果),或者,连盘子都没有。若 m>=n 则 大体有两种放法:
第1种情况:至少有一个盘子为空,即什么也不放,这部分的方法数为f(m,n-1);
第2种情况:全部盘子都有苹果,那么先从m个苹果中抽取出n个出来,各个盘子分一个,考虑剩下的m-n个苹果放到n个盘子里的放法,这样就成功把f(m,n)降到了f(m-n,n)。#include<stdio.h> int f(int x,int y) { if(y ==1||x==0) return 1; if(x<y) return f(x,x); return f(x,y-1)+f(x-y,y);//至少一个盘子为空或者每个盘子都放了苹果 } int main() { int t,m,n,i; scanf("%d",&t); for(i=0;i<t;i++) { scanf("%d%d",&m,&n); printf("%d\n",f(m,n)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/gaojupeng/p/4448272.html