# 動態規劃(dynamic programming) 終於到了我心中的大大大大魔王,這是我目前學到最難做最難想的演算法,運用到的許多遞迴的觀念還有分治演算法的概念,所以對遞迴和分治法要夠熟來解決dp才能得心應手。 但dp的難度真的太高,所以這邊只會紀錄最基礎的部分。 一般如果要進行費氏數列的運算會利用遞迴做,f(n-1)+f(n-2) ```cpp= #include <iostream> using namespace std; int f(int n){ if(n == 1 || n == 2) return 1; return f(n-1)+f(n-2); } int main(){ for(int i = 1;i <= 10;i++){ cout << f(i) << " "; } cout << endl; return 0; } ``` 雖然此方法可行,但是當數字過大的時候他就沒辦法運算,此時就要用到動態規劃法,這樣可以算到很大的數字。 ```cpp= #include <iostream> using namespace std; int main(){ long long int f[100]; f[0] = 1; f[1] = 1; for(int i = 2;i < 80;i++) f[i] = f[i-1]+f[i-2]; cout << f[69] << endl;//ouput = 190392490709135 return 0; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up