動態規劃 根據簡單易知的子問題的解,通過狀態轉移得到父問題的解,自底而上的求出原問題的解
問題描述: 給定一根長為n的鋼條,鋼廠對這根鋼條無成本的切割,不同長度的鋼條有不同的售價,長度為i的鋼條售價為pi.問:切割乙個長為n的鋼條,最多能售多少錢?
如果採取分治法,自頂向下
t(n) = t(i) + t(n-i) i\in(0,n)
時間複雜度是指數級,子問題被重複很多次計算,bad
動態規劃,自底向上
狀態轉移:
d[i] = max(d[i] , d[j] + d[ i-j ]) j\in(0,i)
- 長度為i 的鋼條得到的最高利潤 = 長度為j的鋼條的最高利潤 + 長度為 i-j 的鋼條的最高利潤
- 時間複雜度: i 從1到n , j從1到i o(n^2)
memset(d,-1,sizeof(d);
d[1] = p[1];
for(int i=1;i<=n;i++)
for(int j=1;j應該首先關注哪些狀態發生了轉移
n個數圍成一圈,乙個指標初始狀態指向1號,每次指標指向當前位置的旁邊(左轉和右轉) , 問轉動m次後回到1號的前提下,共有多少種轉法?
狀態選擇轉動次數和指標位置
d[i][j]表示轉動i次指向j的方法數目
狀態轉移方程
d[i][j] = d[i-1][j+1] + d[i-1][j-1]
- 稍微注意下邊界,問題就解決了.時間複雜度o(n^2)
動態規劃基本概念原理分析
基本思想是將待求解問題劃分成若干個子問題,先求解子問題,然後從子問題的解得到原問題的解。如果我們能夠儲存已解決的子問題的答案,而在需要時再找出已求得的答案,這樣就可以避免大量重複的計算,節省時間。這就是動態規劃的基本思路,具體的動態規劃演算法多種多樣,但它們具有相同的填 格式。1 找出最優解的性質,...
基本概念 C 基本概念
由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...
基本概念 數控系統基本概念
第一章 基本概念 數控工具機cnc是一種按事先編制好的加工零件程式進行加工的高效 自動化加工裝置。是 computer numerical control machine tools 的簡稱。數控工具機較好地解決了複雜 精密 小批量 多品種的零件加工問題,是一種柔性的 高效能的自動化工具機。西門子系...