这题和上一题一样都是将问题分解为若干个子问题,这题难度会大一点,递归关系自己想的话不是那么好想:
这题和上一题一样,先找递推式,但是这题的递推式会稍微难一点,有两种情况,第一种情况是盘子的数量比苹果的数量多的情况,如果苹果少的话,就相当于最多只能i个盘子每个盘子放1个苹果,剩下的空盘子就不管了。第二种情况就是盘子少的话,如果有空盘子的话,就i至少会有一个空盘子把,所以就把盘子数减一继续递归,没有空盘子的方法至少每一个盘子里都有一个苹果把,先把苹果分完之后再继续这些不同的分法。
这两题很明显就可以看出来递归的格式与思路了,最后最重要的就是边界条件的确定。边界无非就是盘数为0的话就只有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,m,n; cin>>t; while(t--){ cin>>m>>n; cout<<f(m,n)<<endl; } return 0; }
标签:return,递归,int,这题,苹果,盘子 来源: https://www.cnblogs.com/chengzhangpeideboke/p/15861278.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。