理解動態規劃

2021-10-11 22:42:17 字數 1460 閱讀 4924

通過了解契波那契數列學習動態規劃

問題:斐波那契數列為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 是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基...