給一條鋼管,切割成不同長度的鋼管(也可以不切割),不同的鋼管長度對應不同的價值,求這根鋼管獲得的最大價值。
輸入
第一行包含乙個正整數l,為鋼管的長度。
第二行包含l個正整數a1…al,為長度從1到l的鋼管對應的價值。
輸出
輸出一行,為鋼管能獲得的最大價值。
輸入樣例1
5輸出樣例1 輸入樣例21 2 4 8 16
5輸出樣例2 資料範圍與約束1 10 14 8 16
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 對於子問題重疊的情況,分治法則重複求解,不高效。而動態規劃對每個子問題只求解...