1. 程式人生 > >一隻小蜜蜂(hdoj 2044,動態規劃遞推)

一隻小蜜蜂(hdoj 2044,動態規劃遞推)

Problem Description 有一隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房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=>3等於2=>4//只要號碼差相同結果就相同(4邊形結構)
//    2=>5等於3=>6
//只要號碼差相同結果就相同(5邊形結構) // 然後用遞推,把每個蜂房的已經存的路線+=給周圍的兩個格子就好了 //本題的程式碼只針對一組資料 #include<bits/stdc++.h> #define ll long long using namespace std; const ll maxn=100; ll f[maxn]={0}; int main() { ll a,b;//a,b為蜂房號 cin>>a>>b; ll n=b-a;//n為號數差 f[1]=1; for(ll i=1;i<=n+1
;i++)//a到b可以看成1到n+1,因為蜂房旋轉對稱 { f[i+1]+=f[i];//把f[i]存的步數賦給f[i]旁邊兩個蜂房 f[i+2]+=f[i];//建議畫個圖理解一下 } cout<<f[n+1]<<endl; // 比如說3到6,n=6-3=3,看成1到4,然後找出f[4]即可 }