通過了解契波那契數列學習動態規劃
問題:斐波那契數列為1、1、2、3、5、8、13、21、34……寫乙個函式,輸入n,求斐波那契(fibonacci)數列的第n項。
遞迴方法:
#includeusing namespace std;
int dfs(int x)
int main()
return a[x];
}int main()
執行結果:
使用for迴圈減少了重複子問題。
問題:有乙個陣列,輸入n,選擇長度為n的陣列中不相鄰的數字,使得這些數字加起來都和最大。
遞迴方法:
}執行結果:
問題:給定乙個正數n,可以將其分割成多個數字的和,若要讓這些數字乘積最大,求分割方法(至少分為兩個數),輸出最大的乘積。
遞迴方法:
#include#includeusing namespace std;
int max(int a, int b,int c)
int f(int n)
return a;
}int main()
{ int n;
cin >> n;
cout<
執行結果:
最優子結構:通過求子問題的解,可以獲得原問題的最優解。
理解動態規劃
看了演算法導論上對動態規劃的講解,覺得自己對動態規劃的理解又進了一步,之前在讀到 演算法之道 相關章節時就有這感覺,但是仍然不敢說自己已經完全掌握了動態規劃,只是比以前又透徹了一些,說說自己新的理解,其實就是複述一下演算法導論上的內容而已。裝配線排程問題 乙個產品要經過n道工序,有兩條裝配鏈提供著n...
動態規劃的理解
動態規劃的理解 什麼是動態規劃 動態規劃是一種非常精妙的演算法思想,它沒有固定的寫法,極其靈活,常常需要具體問題具體分析。和之前介紹的大部分演算法不同,一開始就直接討論動態規劃的概念並不是很好的學習方式,反而先接觸一些經典模型會有更好的效果。因此本章主要介紹一些動態規劃的經典模型,並在其中穿插動態規...
動態規劃 基礎理解
動態規劃 英語 dynamic programming,簡稱 dp 是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基...