有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。
其中,蜂房的結構如下所示。
輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b(0對於每個測試例項,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個例項的輸出佔一行。
21 23 6
1設陣列f[50]儲存從蜂房1到達蜂房n的可能路線數3
思路問題:
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的可能路線數...