POJ1644放苹果
今天复(yu)习了一下递归,有一点点体会;
思路如下:
1.找到一个显而易见的结果,作为递归的返回条件。
2.分析下一步可以做的所有选择(要能包含所有结果,不重不漏),统统递归。
3.所有选择得出的结果之和就是所求结果。
来看看代码:
#include<iostream> #include<cstring> using namespace std; int ap,pl; int solve(int a,int p) { if(a==0||a==1||p==1)return 1;//显然只有1个或0个苹果时,或只有一种盘子时,只有一种方法。 if(a<p) return solve(a,a);//如果盘子比苹果多,那么等价于此情况。 else return solve(a-p,p)+solve(a,p-1);//每个盘子都放或一个不放 } int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>ap>>pl; cout<<solve(ap,pl); } return 0; }

浙公网安备 33010602011771号