一隻小蜜蜂(hdoj 2044,動態規劃遞推)
阿新 • • 發佈:2018-11-05
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
其中,蜂房的結構如下所示。
![](http://acm.hdu.edu.cn/data/images/C40-1001-1.jpg)
//思路: // 蜂房的旋轉對稱性: // 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]即可 }