【HPU-OJ】Divide the pears(数学,思维)

 Divide the pears

时间限制: 1 Sec  内存限制: 128 MB

提交: 14  解决: 13

题目描述

Macro非常喜欢吃梨,有一天他得到了ACMICPC组委会送给他的一筐梨子。他比较心疼学生,就打算把梨子分给学生吃。现在他要把M个梨子放到N个盘子里面 (我们允许有的盘子为空) ,你能告诉Macro有多少种分法吗?

(请注意,如果有三个盘子,我们将5,1,1和1,1,5,视为同一种分法)

输入

第一行是一个整数t,代表有t组样例。

第二行有两个整数M 和 N 代表有M个梨和N个盘子。

输出

输出有多少种方法

样例输入

1
7 3

样例输出

8

题解:核心在于理解 sum(m,n-1)+sum(m-n,n);

前一部分表示盘子有空的,空的可以是一个两个至n-1个,所以依次类推就可以转化为m个苹果放在n-1,n-2......的盘子里。

后一部分表示所有盘子都有苹果,那么每个盘子苹果至少一个,就剩余m-n个苹果,问题就转化为了m-n个苹果放在你、个盘子的情况

#include  
#include  
#include  
using namespace std;  
#define CLR(a,b) memset(a,b,sizeof(a))  
int sum(int m,int n)
{
	if(m<0)
		return 0;
	if(m==0||m==1)
		return 1;
	if(n==0||n==1)
		return 1;
	return sum(m,n-1)+sum(m-n,n);
}
int main()  
{   
    int m,n,u;
    scanf("%d",&u);
    while(u--)
    {
    	scanf("%d%d",&m,&n);
    	printf("%d\n",sum(m,n));
	}
    return 0;  
}  



你可能感兴趣的:(数学,思维)