動態規劃 鋼條問題

2021-10-04 23:29:00 字數 2992 閱讀 6959

優點:無,分解成多個不同的長度,然後相加,找到最優解。

缺點:重複計算

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 鋼條切割問題___遞迴實現

;//索引代表 鋼條的長度,值代表**

console.writeline(updown(0, p));

console.writeline(updown(1, p));

console.writeline(updown(2, p));

console.writeline(updown(3, p));

console.writeline(updown(4, p));

console.writeline(updown(5, p));

console.writeline(updown(6, p));

console.writeline(updown(7, p));

console.writeline(updown(8, p));

console.writeline(updown(9, p));

console.writeline(updown(10, p));

console.readkey();

}public static int updown(int n,int p)//求得長度為n的最大收益

}return tempmaxprice;}}

}

自頂向下

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 鋼條切割問題___帶備忘的自頂向下法_動態規劃_

;//索引代表 鋼條的長度,值代表**

console.writeline(updown(0, p, result));

console.writeline(updown(1, p, result));

console.writeline(updown(2, p, result));

console.writeline(updown(3, p, result));

console.writeline(updown(4, p, result));

console.writeline(updown(5, p, result));

console.writeline(updown(6, p, result));

console.writeline(updown(7, p, result));

console.writeline(updown(8, p, result));

console.writeline(updown(9, p, result));

console.writeline(updown(10, p, result));

console.readkey();

}//帶備忘的自頂向下法

public static int updown(int n, int p,int result)//求得長度為n的最大收益

int tempmaxprice = 0;

for (int i = 1; i < n + 1; i++)

}result[n] = tempmaxprice;

return tempmaxprice;}}

}

自底向上

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 鋼條切割問題___帶備忘的自頂向下法_動態規劃_

;//索引代表 鋼條的長度,值代表**

console.writeline(updown(0, p, result));

console.writeline(updown(1, p, result));

console.writeline(updown(2, p, result));

console.writeline(updown(3, p, result));

console.writeline(updown(4, p, result));

console.writeline(updown(5, p, result));

console.writeline(updown(6, p, result));

console.writeline(updown(7, p, result));

console.writeline(updown(8, p, result));

console.writeline(updown(9, p, result));

console.writeline(updown(10, p, result));

console.readkey();

}//帶備忘的自頂向下法

public static int updown(int n, int p,int result)//求得長度為n的最大收益

int tempmaxprice = 0;

for (int i = 1; i < n + 1; i++)

}result[n] = tempmaxprice;

return tempmaxprice;}}

}

來自si

動態規劃 鋼條切割問題

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

動態規劃 鋼條切割問題

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

動態規劃 鋼條切割問題

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