蜜蜂爬蜂房(記憶化遞迴)

2021-09-13 15:54:58 字數 1256 閱讀 6293

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。

其中,蜂房的結構如下所示。

input

輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b(0output

對於每個測試例項,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個例項的輸出佔一行。

sample input

2

1 23 6

sample output

1

3

一開始看到這個題目,首先想到的是遞迴,然後理所當然的超時,由於對動態規劃還不是很理解,在想了許久後採用記憶化遞迴,減少重複次數,總算ac了

思路:通過觀察發現(由3——>6舉例),3可以到4,5(形成樹杈,4,5為分叉); 4可以到5,6(再分支)..........就是畫了個樹狀圖,發現了乙個一般規律,每個數字通過加1,加2形成樹杈,一直到大於等於目標數字時停止分叉,最後所有等於目標數字的樹杈個數就是答案(畫個樹杈圖就明白了)。我也不知道自己怎麼想出來的這個思路,感覺很不錯。

這個題目竟然是斐波那鍥數列,我去,我是怎麼做的題啊(摸摸頭),附上**

j記憶化搜尋**如下:

#include#include#include#include#include#include #include #include #include#include#include #include#include #include typedef long long ll;

using namespace std;

ll slove(ll x,ll y);

ll ans[10010];

int main()

斐波那切數列**如下:

#include#include#include#include#include#include #include #include #include#include#include #include#include #include #define  inf  0x3f3f3f3f

typedef long long ll;

using namespace std;

ll solve(ll x);

int main()

}ll solve(ll x)

return f[x];

}

總結 遞迴 記憶化搜尋 遞迴

遞迴函式執行時分為函式 前進段和返回段,真正明白並時刻記住這個才真正掌握了遞迴。寫遞迴時三點 開始定義的 引數,結束條件 邊界 若干if語句 遞迴呼叫及 返回段運算 一般引數中總有乙個代表遞迴層數。遞迴結束返回時要考慮是否修改了全域性變數,並將其改回,這個是為回溯做準備。記憶化搜尋 解決了遞迴時大量...

記憶化搜尋(遞迴)講解

記憶化的本質是 先記錄,後返回 記住 一定要記錄,否則就是普通的遞迴 如果表中有,則直接返回。1.斐波那契寫法 1 1 2 3 5 8 13 結果 1134903170 include include include define ll long long using namespace std l...

遞迴方法 記憶化dp)

比如 w 30,1,0 w 30,1,0 既滿足條件1又滿足條件2 這種時候我們就按最上面的條件來算 所以答案為1 輸入測試樣例由多組測試資料組成。每組測試資料第一行輸入三個整數 a b c 20 a,b,c 20 如果a,b,c均為 1則退出程式 輸出輸出遞迴後的結果 樣例輸入 copy 1 1 ...