2020.10.13開始打卡每日一題
題目一:給定斐波那鍥的前兩項,求第n項斐波那鍥數列的值,因為數字很大,我們對結果mod(1e9+7)
題目二:給定整數n,代表台階數,一次可以跨2個或者1個台階,求多少種走法
題目三:假設農場中成熟的母牛每年會生一頭小母牛,並且永遠不會死(就是這樣)。第一年,農場只有乙隻成熟的母牛,從第二年開始,母牛開始生小母牛。每只小母牛三年之後成熟,又可以生小母牛。給定正數n,求n年後牛的數量。
題目四:給定乙個2n的網格,現在有若干大小為12的板磚(只能豎著或者橫著放,必),需要無縫緊密放到網格之中,返回多少種放法。
…其實這些都是斐波那鍥數列,非常有意思啊,哈哈哈哈哈哈。
const
int mod =
1000000007
;int
fabonacci
(int n)
顯然,計算的節點個數是 o(2^n) 的級別的,存在大量重複計算。
時間複雜度是 o(2n)o(2n),一秒內大約能算到第三四十項。
記錄已經計算過的狀態,每一次需要計算時查表,時間複雜度o(n)
const
int n =
100000
, mod =
1000000007
;int a[n]
;//計算這個數有沒有計算過
intfabonacci2
(int n)
迴圈遞推,時間複雜度還是o(n),但是需要開乙個長度是n的陣列,需要的記憶體是:
4 * n / (1024 * 1024)
const
int n =
100000000
, mod =
1000000007
;int
fabonacci3
(int n)
return a[n]
;}
其實我們只需要用前兩項來計算後一項,那麼如果我們只需要得到第n、項,不需要開乙個大的陣列。
時間複雜度不變,空間複雜度為o(1)
const
int mod =
1000000007
;int
fabonacci4
(int n)
return z;
}
我們知道快速冪可以用超快的速度計算出超過10^8級別的計算。通過找到項與項之間的關係,用矩陣的乘法去計算矩陣快速冪,次方可以用快速冪來優化。
矩陣快速冪:乙個函式用來計算矩陣的乘法,另乙個是計算矩陣的n次方。
const
int n;
int temp[n]
[n];
//快速冪的模板
void
multiplies
(int a[
][n]
,int b[
][n]
,int c[
][n]
)for
(int i =
0; i < n; i ++
)for
(int j =
0; j < n; j ++
) c[i]
[j]= temp[i]
[j];
}int res[n]
[n];
intfastpower
(int a[
][n]
,long
long n)
;//int res[2] = , };
memset
(res,0,
sizeof
(res));
for(
int i =
0; i < n ; i++
)//int t[2] = , };//轉移矩陣
//long long k = n - 1;
while
(n)
這道題呢,需要計算出轉移矩陣,然後計算n-1次方,
x1=【x1,x0】,那麼xn=【xn,xn-1】;
a=【1 1 1 0】;
xn=xn-1 * a;
遞推得到:xn=x1 * a^(n-1)
先計算a^n,然後再左乘乙個x1,就能得到xn,再取xn的第乙個元素就是答案
const
int n;
const
int mod =
1000000007
;void
multiplies
(int a[
2],int b[
2],int c[
2]),
};for(
int i =
0; i <
2; i ++
)for
(int j =
0; j <
2; j ++
)for
(int k =
0; k <
2; k ++
)for
(int i =
0; i <
2; i ++
)for
(int j =
0; j <
2; j ++
) c[i]
[j]= temp[i]
[j];
}int res[n]
[n];
intfastpower
(long
long n)
;//int res[2] = , };
memset
(res,0,
sizeof
(res));
for(
int i =
0; i < n ; i++
)int t[
2]=,
};//轉移矩陣
long
long k = n -1;
while
(k)int cur[2]
=;for(
int i =
0; i <
2; i ++
)for
(int j =
0; j <
2; j ++
)return cur[0]
;}
這其實模板題啊,懂原理學會運用就行。
近期預告:
線段樹、樹狀陣列、狀壓dp、trie樹、圖論
15 斐波那鍥數列
15.斐波那鍥數列 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0,第1項是1 輸入 4返回值 3分析 1.遞迴思想,呼叫斐波那契數列,重複的自己呼叫自己 2.斐波那契數列就是當n 3的時候,結果為1 大於3的時候為f n 1 f n 2...
生成蛇形斐波那鍥數列
2021 8 81 滴滴筆試 題目描述 輸入 正整數n 輸出 n n的迂迴費波那契矩陣 首先寫出蛇形遍歷陣列過程 import numpy as np 蛇形遍歷二維陣列 n n int input strip data np.zeros n,n astype int top row n 1top c...
letcode每日一題 將陣列拆分成斐波那契序列
今天的每日一題用到了回溯演算法,這個我不是太熟悉,最後去借鑑了題解,但是不管怎麼說還是來記錄一下 回溯演算法簡介 public boolean panduan int prev,int index,int sum,string s,arraylistdeque long cuur long 0l 嘗...