竞赛
考级
1.如果盘子数比苹果数多,那么即使我们讲苹果拆成一个一个放,我们也注定会有一些盘子是空的,所以我们直接排除掉这些空盘子。即: if(n > m){ return(f(m,m)); } 2.放苹果是可以分开考虑是放满每一个盘子还是空一个盘子。如果是全放满则是f(m-n,n),如果空一个盘子就是f(m,n-1). 3.如果盘子或者苹果只有一个,那么只有一种方法,直接return 1.
风虽
者仇复
༺ཌༀ元气满满ༀད༻
轩至洛阳
【深搜】 递归搜索盘子的使用情况,建立如下递归搜索树 【代码如下】 记录上一个盘子的苹果数,本次放置的苹果不小于上一个。保证不重复
路小凤
#include<bits/stdc++.h> using namespace std; int fun(int m,int n){ if(n<=1||m<=1)return 1; if(m<n)return fun(m,m); return fun(m-n,n)+fun(m,n-1); } int main(){ int m,n,t; cin>>t; for(int i=0;i<t;i++){ cin>>m>>n; cout<<fun(m,n)<<endl; }
152****7881
#include<bits/stdc++.h> using namespace std; int fun(int m,int n){ if(n<=1||m<=1)return 1; if(m<n)return fun(m,m); return fun(m-n,n)+fun(m,n-1); } int main(){ int m,n,t; cin>>t; for(int i=0;i<t;i++){ cin>>m>>n; cout<<fun(m,n)<<endl; } }
梓恩