動態規劃之鋼條切割

2021-06-19 02:15:39 字數 845 閱讀 8656

最近學習動態規劃,做個匯報吧!

不同長度的鋼條,賣出時收益不同:

(1,1)(2,5)(3,8)(4,9)(5,10)(6,17)(7,17)(8,20)(9,24)(10,30)

問題就是我有一根鋼條,怎樣可以收益最大?

這裡只寫思想,不寫過程,專注於演算法:

一根鋼條,假如10公尺,我可以整體去賣,也可以切斷幾段去賣,那就用整體去賣和切成幾段去賣相比較,好,假如我先要切一下,從**切呢?反正不管從**切,我都是想將兩半賣的錢加起來更多,那好辦,將每一半都都以最**去賣,怎麼賣?假如左面一段是6公尺,右面一段是4公尺。問6公尺怎麼賣?單純賣六公尺還是切開賣?切開賣怎麼切?想一下,就是說我現在要解決的問題也許是乙個大問題,但這個問題要依靠一些小問題,小問題解決好了,大問題才能解決好。(有人稱之為最優子結構性質)

試想一下,

一公尺的怎麼賣?單純賣,不切。

兩公尺的怎麼賣?切還是不切?好了,我算算,切成兩段一公尺的收益為a,整體賣收益b,我取其中比較大的。

三公尺怎麼賣?切成乙個一公尺,乙個兩公尺,注意,我上面算出了兩公尺怎麼賣收益最大,好了,這兩公尺只需告訴我最大收益是多少就行了,收益為b;三公尺整體賣收益c;選擇最大的。

四公尺怎麼賣?切一刀,化成的問題都是解決過的,可以直接用上面的結論;整體賣收益多少,比較一下,可以得出乙個結論4公尺怎樣賣收益最大。

同理,我就能求出10公尺最大收益。

這裡需要注意乙個問題,大問題的最優解依賴於小問題的結論,可以證明,這裡沒有太多重複且不必要的計算,只是需要一定的空間儲存結論。

試想,如果我沒有這樣自下向上而是自上向下,那就可能是乙個遞迴,會有重複的計算,不是不行,只是需要乙個儲存機制,可以,有人稱之為帶備忘的自頂向下法。

**應該好寫了吧……

動態規劃之鋼條切割

假定某公司購買長鋼條,將其切割為短鋼條進行 切割工序本身沒有成本支出 考慮求出最佳的切割方案。一段長度為i的鋼條 如下表 長度i p11 2538 49510 617717 820924 1030 長度為n的鋼條共有2的n 1次方種不同的切割方案,因為在距離鋼條左端i處,總是可以選擇切割或不切割。所...

動態規劃 鋼條切割

一家公司購買長鋼條,將其切割成短鋼條 切割本身沒有成本,長度為i的短鋼條的 為pi。那給定一段長度為n的鋼條和乙個 表pi,求鋼條的切割方案使得收益rn最大。如乙個pi如下 長度i12 3456 78910 pi15 891017 1720 2430 在距離鋼條左端i長度處,我們總是可以選擇切割或者...

動態規劃 鋼條切割

這是演算法導論動態規劃的乙個例子,自己實現了一下 給定乙個長度為n英吋的鋼條和乙個 表pi i 1,2 n 求切割鋼條方案,使得銷售收益rn最大。注意,如果長度為n的鋼條 pn足夠大,則最優解可能就不需要切割。分析 如下 include include include using namespace...