一家公司購買長鋼條,將其切割成短鋼條**,切割本身沒有成本,長度為i的短鋼條的**為pi。那給定一段長度為n的鋼條和乙個**表pi,求鋼條的切割方案使得收益rn最大。如乙個pi如下:
長度i12
3456
78910
**pi15
891017
1720
2430
在距離鋼條左端i長度處,我們總是可以選擇切割或者不切割,所以長度為n的鋼條共有2的n-1次方種不同的切割方案.
對於上述**錶樣例,我們可以觀察所有最優收益值ri及對應的最優解方案:
r1 = 1,切割方案1 = 1(無切割)
r2 = 5, 切割方案2 = 2(無切割)
r3 = 8, 切割方案3 = 3(無切割)
r4 = 10, 切割方案4 = 2 + 2
r5 = 13, 切割方案5 = 2 + 3
r6 = 17, 切割方案6 = 6(無切割)
r7 = 18, 切割方案7 = 1 + 6或7 = 2 + 2 + 3
r8 = 22, 切割方案8 = 2 + 6
r9 = 25, 切割方案9 = 3 + 6
r10 = 30,切割方案10 = 10(無切割)
更一般地,對於rn(n >= 1),我們可以用更短的鋼條的最優切割收益來描述它:
rn = max(pn, r1 + rn-1, r2 + rn-2,...,rn-1 + r1)
首先將鋼條切割為長度為i和n - i兩段,接著求解這兩段的最優切割收益ri和rn - i,(每種方案的最優收益為兩段的最優收益之和),由於無法預知哪種方案會獲得最優收益,我們必須考察所有可能的i,選取其中收益最大者
動態規劃 鋼條切割
這是演算法導論動態規劃的乙個例子,自己實現了一下 給定乙個長度為n英吋的鋼條和乙個 表pi i 1,2 n 求切割鋼條方案,使得銷售收益rn最大。注意,如果長度為n的鋼條 pn足夠大,則最優解可能就不需要切割。分析 如下 include include include using namespace...
動態規劃 鋼條切割
動態規劃 dynamic programming 什麼是動態規劃,我們要如何描述它?動態規劃演算法通常基於乙個遞推公式及乙個或多個初始狀態。當前子問題的解將由上一次子問題的解推出。動態規劃和分治法相似,都是通過組合子問題的解來求解原問題。分治法將問題劃分成互不相交的子問題,遞迴求解子問題,再將他們的...
動態規劃 切割鋼條
動態規劃按照我的理解就是避免重複計算,犧牲空間換時間,將重複計算的結果儲存起來,下次用的時候,直接使用儲存的結果,我文字不多,直接上 沒有程式設計基礎的兄弟們可能不太能看懂 兩種方式一種是遞迴,另一種是遞推 其實就是採用for迴圈 動態規劃 切割鋼條 公尺 m 1 2 3 4 5 6 7 8 9 1...