鋼條切割問題

2021-09-11 20:09:04 字數 3514 閱讀 8094

class

program

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

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;

}}

class

program

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

console.

writeline

(updown(0

, p,resultprice));

console.

writeline

(updown(1

, p, resultprice));

console.

writeline

(updown(2

, p, resultprice));

console.

writeline

(updown(3

, p, resultprice));

console.

writeline

(updown(4

, p, resultprice));

console.

writeline

(updown(5

, p, resultprice));

console.

writeline

(updown(6

, p, resultprice));

console.

writeline

(updown(7

, p, resultprice));

console.

writeline

(updown(8

, p, resultprice));

console.

writeline

(updown(9

, p, resultprice));

console.

writeline

(updown(10

, p, resultprice));

console.

readkey()

;}///

/// 帶備忘錄的自頂向下的切割

///

///

///

///

///

private

static int updown

(int n, int[

] p,int[

] result)

int tempmaxprice =0;

for(int i =

1; i <= n; i++)}

//表示長度為n的最大利潤值

result[n]

= tempmaxprice;

//將計算的子問題**儲存

return tempmaxprice;

}}

class

program

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

console.

writeline

(bottomup(0

,p,resultprice));

console.

writeline

(bottomup(1

, p, resultprice));

console.

writeline

(bottomup(2

, p, resultprice));

console.

writeline

(bottomup(3

, p, resultprice));

console.

writeline

(bottomup(4

, p, resultprice));

console.

writeline

(bottomup(5

, p, resultprice));

console.

writeline

(bottomup(6

, p, resultprice));

console.

writeline

(bottomup(7

, p, resultprice));

console.

writeline

(bottomup(8

, p, resultprice));

console.

writeline

(bottomup(9

, p, resultprice));

console.

writeline

(bottomup(10

, p, resultprice));

console.

readkey()

;}//若想取n的最大值,自底向上依次取得1,2,3,,,n-1的最大值

private

static int bottomup

(int n,int[

] p,int[

] result)

} result[i]

= tempmaxprice;

}return result[n];}

}

鋼條切割問題

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

鋼條切割問題

對應於演算法導論上的鋼條切割問題。package dynamic programming 動態優化問題之鋼條切割問題 長度i 1 2 3 4 5 6 7 8 9 10 p 1 5 8 9 10 17 17 20 24 30 問題,對於長度為i的鋼條,怎麼切割,使之價值最大。public class ...

鋼條切割問題

一 問題描述 給定乙個長度為n英吋的鋼條和一張 表 英吋 美元 求乙個切割方案使得獲取的收益r最大。例如,對於如下的 表 給定長度n為4英吋,則獲取的最大利益為10美元,對應的切割方案為 2 2。一種遞迴求解法 在不考慮切割順序的前提下 1 n 1 和 n 1 1這兩種切割方式實際上收益是一樣的,可...