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;
}

 

posted @ 2020-09-28 16:38  lil_chuan  阅读(78)  评论(1)    收藏  举报