一只小蜜蜂... hdu2044
生活随笔
收集整理的這篇文章主要介紹了
一只小蜜蜂... hdu2044
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題源:一只小蜜蜂… hdu2044
題目:
有一只經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請編程計算蜜蜂從蜂房a爬到蜂房b的可能路線數。
其中,蜂房的結構如下所示。
Input
輸入數據的第一行是一個整數N,表示測試實例的個數,然后是N 行數據,每行包含兩個整數a和b(0<a<b<50)。
Output
對于每個測試實例,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個實例的輸出占一行。
Sample Input
2
1 2
3 6
Sample Output
1
3
思路:
找規律,有思路:
規律無論是從第幾個房間到第幾個房間,相鄰房間之間的走法都是1;題中要求只能往右走,則只能往比此刻房間號大的房間走;從1到2為1, 2到3的走法為從1到3的走法加上2到3的走法,類推從3到8:
先求3到4,再求3到5(3直接到5加上3到4的走法) 再求3到6(3到4的走法加上3到5的走法) 再求3到7(3到5的走法加上3到6的走法 ) 最后求3到8(3到6的走法加上3到7的走法);
AC代碼:
今天晚上突然想到這道題,上次寫這道題時,其實當時我是用的遞歸暴力求解,后來發現超時,就放棄了,今晚忽然想起來用記憶化搜索可以大大節省時間,為何不修改一下。試了一下,真的ac了
放代碼:、
#include<bits/stdc++.h> #include<cmath> typedef long long ll; using namespace std; //int a[100][100]; int a,b; ll dp[1000];//步數可能會爆int ll d(int x)//此處有坑,雖然dp數組用long loong表示了,但是這個遞歸函數的返回值也要設置成long long {if(x>b) return 0;if(dp[x]>0) return dp[x];if(x==b) return 1;return dp[x]=d(x+1)+d(x+2); } int main() {int c;cin >>c;while(c--){memset(dp,0,sizeof dp);cin >>a>>b;cout<<d(a)<<endl;}return 0;}總結
以上是生活随笔為你收集整理的一只小蜜蜂... hdu2044的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XD的初认识
- 下一篇: 算法53----换钱的最小次数和方法数【