PAT 蜜蜂尋路 (遞推) - 詳細題解
阿新 • • 發佈:2018-11-19
這道題非常巧妙, 仔細理解一下行走的邏輯, 發現遞推公式其實就是一個斐波那契數列
但是由於資料過大, 僅僅開int也開不了2^31那麼多的陣列, 在這裡有兩種思路
1. 在上網看的, 因為資料範圍只有2^63, 其實開到102就足矣了
2. 我使用的, 用一個滾動陣列來遞推就好了
//蜜蜂尋路 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <vector> #include <queue> #include <cmath> using namespace std; #define ms(x, n) memset(x,n,sizeof(x)); typedef long long LL; const LL maxn = 2147483648+5; LL dp[3]; //滾動陣列 int n, a, b; LL solve() { ms(dp, 0); dp[0] = 1, dp[1] = 1; for(int i = 2; i < b-a+1; i++) dp[i%3] = dp[0]+dp[1]+dp[2]-dp[i%3]; //即dp[i]=dp[i-1]+dp][i-2] LL ans = 0; for(int i = 0; i < 3; i++) ans = max(dp[i], ans); return ans; } int main() { cin >> n; while(n--){ cin >> a >> b; cout << solve() << endl; //從1到4和從2到5答案是一樣的 } return 0; }