本文主要是介绍信息学奥赛一本通1206:放苹果题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目描述】把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 【输入】第一行是测试数据的数目t(0<=t<=20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。 【输出】对输入的每组数据M和N,用一行输出相应的K。 【输入样例】1
7 3 【输出样例】8 |
题解:
这题是一个很多算法都能写的题目(深搜,递推,递归,动态规划)
但这题来自递归,那就用递归写。
首先他得有递归边界吧!经过我们的探索(不要说你没探索过)当苹果或盘子为一或零时,方案数为1
🆗,来讲不特殊的的~~
如图:
m为5,n为3
所以放苹果有两种可能:1.一个盘子不放,那么m不变,n-1
2.每个盘子都先放一个,那么m变为m-n,n不变
最终把两者加起来。
奥!对了
还有一种特殊情况:m<n那么n-m个盘子就神马也放不了了。
那么n就等于m
所以:
递归代码为:
int f(int m,int n)
{if(n==1||m==1||n==0||m==0){return 1; }if(m<n){return f(m,m);}return f(m,n-1)+f(m-n,n);}
主函数很简单,不多讲解(别跟我讲你不知道啊━━( ̄ー ̄*|||━━))
int main()
{int t;cin>>t;while(t--){int m,n;cin>>m>>n;cout<<f(m,n)<<endl; }return 0;
}
什么?!
你问我总代码?
直接加个头文件就好了呀!
*************************************************************
龌龊的人类,你们啥时候能自己写代码!!!!( ̄_ ̄|||)
这篇关于信息学奥赛一本通1206:放苹果题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!