openjudge(POJ)-1664 放苹果

 

对于n个盘子,m个苹果,我们要么在每个盘子上都放苹果,要么至少有一个盘子不放。

一个盘子不放就是f(m,n-1),全部都放的时候苹果就变成了n-m个,但是盘子的数目是不变的,因为此时还没有产生方案数,都放也等于不放嘛。

如果盘子的数目多于了苹果的数目,那我们就只能在m个盘子中放苹果了,其余的盘子都是一样的,所以就不用管。

如果苹果数目等于零,依题意,方案数为1。

盘子数目为0,那方案数就是0。

#include <iostream>
using namespace std;
int f(int m,int n)
{
	if (n>m)
		return f(m,m);
	if (m==0)
		return 1;
	if (n==0)
		return 0;
	return f(m,n-1)+f(m-n,n);
 } 
int main()
{
	int t;
	int m,n;
	cin>>t;
	while (t--) {
		cin>>m>>n;
		cout<<f(m,n)<<endl;
	}	
	return 0;
}

 

posted @ 2018-11-08 15:35  xyee  阅读(95)  评论(0编辑  收藏  举报