動態規劃 鋼管切割問題

2021-10-25 08:24:49 字數 1037 閱讀 6655

給一條鋼管,切割成不同長度的鋼管(也可以不切割),不同的鋼管長度對應不同的價值,求這根鋼管獲得的最大價值。

輸入

第一行包含乙個正整數l,為鋼管的長度。

第二行包含l個正整數a1…al,為長度從1到l的鋼管對應的價值。

輸出

輸出一行,為鋼管能獲得的最大價值。

輸入樣例1

5

1 2 4 8 16

輸出樣例1

輸入樣例2

5

1 10 14 8 16

輸出樣例2

資料範圍與約束

1<=a,l<=10000

對於長度為l的鋼管,把它分割成l個子問題,每乙個長度為i(1<=i<=l)的子鋼管為乙個子問題。

對於每乙個長度為i的鋼管,從j處切割,遍歷j從1到i,左邊不再切割,右邊可以進行切割,找最大的切割方式

#include

int value[

10010];

int dp[

10010]=

;int

max(

int a,

int b)

;void

cut_rod

(int value,

int l)

;int

main()

void

cut_rod

(int value,

int l)

}int

max(

int a,

int b)

演算法導論 動態規劃之「鋼管切割」問題

動態規劃,其實跟分治法有些相似,基本思想都是將複雜的問題分成數個簡單的子問題,然後再去解決。它們的區別在於,分治法關注的子問題不相互 重疊 而動態規劃關注的子問題,多是相互 重疊 的。比如在快速排序中,我們將資料分成兩部分,這兩部分再分別快速排序的遞迴思想,也就是將整個問題的排序劃分為子問題子陣列的...

動態規劃 鋼條切割問題

已知鋼條切割的不同長度對應的不同 如下所示 長度i 1 23 45 67 89 10 pi 1589101717202430 求輸入長度,輸出最佳的收益。詳細理論知識見 演算法導論第十五章 p359 書中給出三個演算法 一 自頂向下遞迴實現 缺點 當n足夠大時,時間會 性地增長。偽 cut rod ...

動態規劃 鋼條切割問題

動態規劃與分治法相似,都是通過組合子問題的解來求解原問題。回顧下分治法的原理 它將問題劃分為互不相交的子問題 注意 互不相交 遞迴求解子問題,再將它們的解組合起來,即為原問題的解。但是,動態規劃與分治法不同,有以下幾點 1 對於子問題重疊的情況,分治法則重複求解,不高效。而動態規劃對每個子問題只求解...