您的位置:首页 > 其它

华为OJ(放苹果)

2015-08-11 16:59 295 查看
对于m个苹果,n个盘子f(m,n):

如果m<n,那么就跟m个盘子,m个苹果是一样的f(m,m)。

如果m>n,那么有两种情况:一种有空盘子的情况,一种没有空盘子的情况,两种情况不重叠且加一起一定为情况总数。

第一种情况:m个苹果放在n-1个盘子里,因为至少有1个空盘子,即f(m,n-1)

第二种情况:每个盘子都至少有一个苹果,m-n个苹果再放到n个盘子里,即f(m-n,n)。

由上面两种情况得到递归式f(m,n)=f(m,n-1)+f(m-n,n)。

#include<iostream>
using namespace std;
int place_apple(int m,int n);
int main()
{
int m,n;
cin>>m;
cin>>n;
cout<<place_apple(m,n)<<endl;
//system("pause");
return 0;
}
int place_apple(int m,int n)
{
if(m==0||n==1)
return 1;
if(m<n)
return place_apple(m,m);
else
return place_apple(m-n,n)+place_apple(m,n-1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: