第15章15 1鋼條切割

2022-07-29 23:48:15 字數 1932 閱讀 3134

/*每段長度的鋼筋對應不同的盈利,問怎樣切割能盈利最多!**

*///

自頂向下 遞迴

#include#include

#include

using

namespace

std ;

#define maxn 1000000

intp[maxn] ;

int solve(int

n)

int max_num = -maxn ;

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

return

max_num ;

}int

main()

int result =solve(n) ;

printf(

"%d\n

", result) ;

}return0;

}

帶備忘的自頂向下遞迴

#include#include

#include

using

namespace

std ;

#define maxn 1000000

intp[maxn] ;

intvisit[maxn] ;

int solve(int

n)

if (n==0

)

int max_num = -maxn ;

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

visit[n] =max_num ;

return

max_num ;

}int

main()

//盈利可能是 0

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

int result =solve(n) ;

printf(

"%d\n

", result) ;

}return0;

}

自底向上

#include#include

#include

using

namespace

std ;

#define maxn 1000000

intp[maxn] ;

intvisit[maxn] ;

int solve(int

n) visit[i] =max_num ;

}return

visit[n] ;

}int

main()

int result =solve(n) ;

printf(

"%d\n

", result) ;

}return0;

}

自底向上記錄最優解對應的切割方案

#include#include

#include

using

namespace

std ;

#define maxn 1000000

intp[maxn] ;

intvisit[maxn] ;

intcut[maxn] ;

int solve(int

n) }

visit[i] =max_num ;

}return

visit[n] ;

}int

main()

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

int result =solve(n) ;

while

(n) printf(

"%d\n

", result) ;

}return0;

}

view code

15 1 鋼條切割 動態規劃

問題 給定一段長度為n英吋的鋼條和乙個 表,求切割鋼條方案,使收益最大 切割本身沒有成本 解法一 帶備忘錄的自頂向下法 帶備忘錄的自頂向下法 param p 長度為i的鋼條的收益為p i param n 待切割的鋼條的長度 public static intmemoizedcutrod int p,...

演算法導論15 1鋼條切割 練習總結

15.1 1 由公式 15.3 和初始條件t 0 1,證明公式 15.4 成立。15.1 2 舉反例證明下面的 貪心 策略不能保證總是得到最優切割方案。定義長度為i的鋼條的密度為pi i,即每英吋的價值。貪心策略將長度為n的鋼條切割下長度為i 1 i n 的一段,其密度最高。接下來繼續使用相同的策略...

演算法導論 第15章 動態規劃之鋼條切割

python coding utf 8import numpy import copyimport timea 0,1,5,8,9,10,17,17,20,24,30 不同長度鋼條的 表,a k 對應於長度為k的剛條的 assert len a 11 cost numpy.zeros shape 1...