题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044
------------------------------------------------------------------------------------
题意:只能爬向+1或者+2的房间,求第a个房间到第b个房间的路线多少。
思路:递归,爬向第k个房间只能从第k-1或者k-2个房间爬动,所以相加递归即可。
注意:
递归的题目一般要用数组存上所求的解,防止给出较大值时造成的TLE。
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long ll; const double PI = acos(-1.0); const double eps = 1e-6; ll ans[55][55]={0}; ll f(int a,int b){ if(b-a==1) return 1; if(b-a==2) return 2; else return ans[a][b-1]+ans[a][b-2]; } int main(void){ for(int i=1;i<55;i++){ for(int j=i+1;j<55;j++){ ans[i][j]=f(i,j); } } int T=0; scanf("%d",&T); for(int i=0;i<T;i++){ int a,b; scanf("%d %d",&a,&b); printf("%lld\n",ans[a][b]); } return 0; }