演算法學習 鋼條切割

2021-10-03 16:11:45 字數 1412 閱讀 9667

鋼條切割問題

serling公司購買長鋼條,將其切割為短鋼條**。切割工序本身沒有成本支出。公司管理層希望知道最佳的切割方案。假定我們知道serling公司**一段長為i英吋的鋼條的**為pi(i=1,2,…,單位為美元)。鋼條的長度均為整英吋。圖15-1給出了乙個**表的樣例。

鋼條切割問題是這樣的:給定一段長度為n英吋的鋼條和乙個**表pi(i=1,2,…n),求切割鋼條方案,使得銷售收益rn最大。注意,如果長度為n英吋的鋼條的**pn足夠大,最優解可能就是完全不需要切割。

//鋼條切割問題

#include

#include

#include

using

namespace std;

int* record;

//記錄陣列,避免重複子問題的多次計算

int* steel;

//鋼條**表,下標對應鋼條長度

int steel_len;

//鋼條原始長度,也是鋼條種類的數量

//直接遞迴,效能很差,因為有很多的重複子問題多次計算

intdfs

(int len)

return max_value;

}//記憶型遞迴,解決了重複子問題多次計算

intdfs_2

(int len)

//確定首段長度,剩下的遞迴

for(

int first_len =

1; first_len <= len -

1; first_len++

)//計算後儲存

record[len]

= max_value;

return max_value;

}//動規解法

intdp

(int len)

}return arr_dp[len];}

intmain()

record =

newint

[steel_len +1]

;memset

(record,-1

,(steel_len +1)

*sizeof

(int))

; cout <<

dfs(steel_len)

<< endl;

cout <<

dfs_2

(steel_len)

<< endl;

cout <<

dp(steel_len)

<< endl;

return0;

}/*測試用例:

101 5 8 16 10 17 17 20 24 30

*/

演算法學習(動態規劃 一)鋼條切割

給定一段長度為n的鋼條和乙個 表,求切割鋼條方案,使得銷售收益最大 表 長度i123 4567 8910 p15 891017 1720 2430 經過分析,因為在距離鋼條左端i i 1,2,3 n 處,總是可以選擇切割或者不切割,因此可得,其共有2n 1種切割方案,以下是使用自頂向下遞迴實現的 該...

鋼條切割 演算法導論

給定長度任意長度的鋼條的價值,求解如何切割,使給定長度為n的鋼條的價值最大。對於長度為n的鋼條,考慮子問題,我們遍歷1 n的第乙個切割的位置j,即得到長度為j和n j的兩段鋼條,第一段不再切割,僅對第二段繼續切割,遞迴求解,於是就得到了乙個遞迴解法。這裡是c語言實現 define crt secur...

鋼條切割問題

動態規劃的一般步驟 1.刻畫乙個最優解的結構特徵 2.遞迴定義最優解的值 3.計算最優解的值,通常採用自底向上的方法 4.利用計算出的資訊構造乙個最優解 利用動態規劃方法求解類似鋼條切割方案的這一類遞迴問題,可避免反覆求解相同的子結構,下面是樸素遞迴演算法和用動態規劃設計的遞迴演算法的相應實現。鋼條...