HDU2044 乙隻小蜜蜂

2021-08-19 02:49:31 字數 1474 閱讀 2728

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

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

輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b(0對於每個測試例項,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個例項的輸出佔一行。

2

1 23 6

1

3

設陣列f[50]儲存從蜂房1到達蜂房n的可能路線數

思路問題:

1.若是沒有提示該問題是乙個fibonacci數列,我可能沒有找規律數列的概念。

2.認為從蜂房a到蜂房b的可能路線數是由f[b]-f[a]及其它常數所組成的複雜函式式,而沒有發現從蜂房a到蜂房b的可能路線數與從蜂房1到蜂房(b-a)的路線數是相同的,也未能找出相應的複雜函式式,因此最初未能解決問題。

啟發:若是自己的思路難到無法分析下去,就要換個思路思考,一切從簡。

程式設計問題:

借鑑別人的思路後,程式設計仍出現了一下始料未及的問題:

1.(遞迴函式的遞迴式出錯,導致堆疊溢位)

int ff(int n)

解決:

int ff(int n)

2.(提交時,遞迴函式超時,後來知道不用遞迴也行,直接迴圈生成陣列f)

解決:(記憶化)

memset(f,-1,sizeof(f));

int ff(int n)

3.(資料過大溢位,導致wrong answer)(一直都沒注意,沒有意料到使用int型別會溢位,未估測資料大小)

問題**:

int a,b,f[50] = ;
解決:

long long a,b,f[50] = ;
完整**:

#include#includeusing namespace std;

const int maxn = 50;

long long f[maxn] = ;

int main()

{ int kase;

long long a,b;

cin>>kase;

for(int i=3;i>a>>b;

cout啟發:

1.題中有無限延長的資料時要找規律,考慮問題一切從簡。

2.程式設計前要估計資料的大小,選擇合適的資料型別。

hdu2044 乙隻小蜜蜂

思路 觀察一下可以知道,比如走到7,首先要走到5或者6,要走到5,首先要先走到4或3.遞推一下即可 include includeusing namespace std define ll long long ll f 60 int n int main description 有乙隻經過訓練的蜜蜂...

HDU 2044 乙隻小蜜蜂

題目位址 思路 從起點開始,每一步可以分為兩種情況,非別是第i 1點和i 2點。利用遞迴的思想就可以寫出來。b a的值就代表從0點到b a可能的路線!錯點 1.使用遞迴函式超時,2.未看清題目要求,陣列定義成30 3.忽略了資料的增長,應該使用long long int include includ...

乙隻小蜜蜂 HDU 2044

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0output 對於每個測試例項,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數...