43.放苹果(递归练习)


放苹果

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)511151 是同一种分法。

输入

第一行是测试数据的数目t0 <= t <= 20)。以下每行均包含二个整数MN,以空格分开。1<=MN<=10

输出

对输入的每组数据MN,用一行输出相应的K

样例输入


1

7 3

样例输出


8

分析:

这是“数的划分”那道题的变式,无非就是篮子可以为空不同而已,就加一个for循环就行了

代码:

#include

using namespace std;

int f(int,int,int);

int t;

#include

int main()

{

       scanf("%d",&t);

       for(int i=1;i<=t;++i)

       {

              int m,n;

              long long sum=0;

              scanf("%d%d",&m,&n);

              for(int j=1;j<=n;++j)

              sum+=f(m,j,1);

              printf("%lld\n",sum);

       }

       return 0;

}

int f(int a,int b,int c)

{

       int g=0;

       if(b==1) return 1;

       else{

              for(int i=c;i<=a/b;++i)

              g+=f(a-i,b-1,i);

              return g;

       }

}

posted @ 2016-03-04 22:14  csgc0131123  阅读(151)  评论(0编辑  收藏  举报