題解:
一開始我這個代碼想到的是使用遞歸來求解
int digui(int n){int sum=0;if(n==1)sum=1;if(n==2)sum=2;if(n==1||n==2)return sum;if(n>2){return sum+=digui(n-1)+digui(n-2);}
}
但是后面發現明顯超時,我試圖用記憶化搜索來搶救一下,所以就有了下面代碼
int digui(int n){if (memo[n] != -1) {return memo[n];}if (n == 1) {memo[n] = 1;} else if (n == 2) {memo[n] = 2;} else {memo[n] = digui(n-1) + digui(n-2);}return memo[n];
}
memset(memo, -1, sizeof(memo)); //main函數中使用這個進行了數組初始化
確實,使用記憶化搜索保存了之后確實節約了一些時間,因為保存了一些中間結果1,避免了重復計算中間值,但是依舊是超時,處理的n<100,然后就翻起了題解。
然后就發現了大家在