買書問題 動態規劃C

2021-08-17 14:40:06 字數 866 閱讀 4157

在節假日的時候,書店一般都會做**活動。由於《哈利波特》系列相當暢銷,店長決定通過**活動來回饋讀者。上櫃的《哈利波特》平裝書系列中,一共有五卷。假設每一捲單獨銷售均需8歐元。如果讀者一次購買不同的兩卷,就可以扣除5%的費用,三卷則更多,假設具體折扣的情況如下:

本數折扣25%

310%

420%

525%

在乙份訂單中,根據購買的卷數及本數,就會出現可以應用不同折扣規則的情況。但是,一本書只會應用乙個折扣規則。比如,讀者一共買了兩本卷一,一本卷二。那麼,可以享受5%的折扣。另外一本卷一則不能享受折扣。如果有多種折扣,希望計算出的總額盡可能的低。

要求根據以上需求,設計出演算法,能夠計算出讀者所購買一批書的最低**。

1. 用動態規劃首先需找到遞迴公式,因為動態規劃是由頂向下遞迴的,自頂向下求解,根據底層結果得到最終解。

2. 5卷數的**相同,如果用x1...x5對應1~5卷書的本數,f(x1,x2,x3,x4,x5)表費用,那f(x1,x2,x3,x4,x5)=f(x2,x1,x3,x4,x5),根據排列組合,就有5!種表示方法,因此沒有必要區分不同的卷,可以讓書本按遞減(或遞增)來表示,(y1,y2,y3,y4,y5)是x1,x2,x3,x4,x5的重排列,y1>=y2>=y3>=y4>=y5。

3. 遞迴公式:

f(y1,y2,y3,y4,y5)

=0                  (當y1=y2=y3=y4=y5=0)

=min

double f(int y1,int y2,int y3,int y4,int y5)//遞迴實現動態規劃

; sort(p,p+5,(int a,int b)

sort(x,x+n,(int a,int b){

return a

動態規劃 買書問題

相關的文章出處 buy book.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std define i max 100 define j max 100 define k max 100 double m rember i ma...

動態規劃 買書問題

在朱超迪的原 上做了一些修改 問題描述 在節假日的時候,書店一般都會做 活動。由於 哈利波特 系列相當暢銷,店長決定通過 活動來回饋讀者。上櫃的 哈利波特 平裝本系列中,一共有五卷。假設每一捲單獨銷售均需8歐元。如果讀者一次購買不同的兩卷,就可以扣除5 的費用,三卷則更多。假設具體折扣的情況如下 本...

買書問題的動態規劃實現

encoding utf 8 買書問題 貪心演算法是失效的,5,3 5,4單個並不是最優的,這次選擇會影響下一次的選擇的 比如反例 5,5,5,3,3 貪心的策略為 5,5,5,3,3 133.2,改進的貪心策略為 5,5,4,4,3 132.8,而實際的最優的策略為 5,4,4,4,4 132.4...