此题的思路:
首先这道题是一道递推题。坦白的说,这是我遇到的第一道递推题,在刚看到这道题脑中就要了一个思路,但是在最开始,我的思路是从前往后推,到后面我才意识到,这道题,应该从后往前推导,这样换中思路想一下,题一下子就变的十分简单;总的来说,这道题应该从后往前进行逆向的递推,假设我们需要从1到49,那么我们应从49开始想,能到49就只有48和47,所以f(49)=f(48)+f(47),所以得到了一个通项f(n)=f(n-1)+f(n-2)。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #define Max 51 using namespace std; int main(void) { freopen("in.txt","r",stdin); int N,a,b; long long int c[Max]; cin>>N; while(N--) { memset(c,0,sizeof(c)); cin>>a>>b; int i; if(a<b) { c[a]=1; c[a+1]=1; for(i=a+2;i<=b;i++) c[i]=c[i-1]+c[i-2]; } cout<<c[b]<<endl; } fclose(stdin); return 0; }