買書問題的動態規劃實現

2021-06-27 05:59:41 字數 2080 閱讀 2129

#---*--- 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

#動態規劃多採用遞迴實現,但是遞迴的效能不是很好,有時間和空間的複雜度的占用

#注意遞迴的終止條件和迴圈變數的控制

#----------------------------

import copy

def buy_book_question(y1,y2,y3,y4,y5):

booklist=

booklist.sort(reverse=true)

y1,y2,y3,y4,y5=booklist[0],booklist[1],booklist[2],booklist[3],booklist[4]

# solution=00000

if len(booklist)==5:

if y1==y2==y3==y4==y5==0:

return 0

else:

if y5>=1:

x1=5*8*0.75+buy_book_question(y1-1,y2-1,y3-1,y4-1,y5-1)

# solution=y1*10000+y2*1000+y3*100+y4*10+y5

else:

x1=10**10

if booklist[3]>=1:

x2=4*8*0.8+buy_book_question(y1-1,y2-1,y3-1,y4-1,y5)

# solution=y1*10000+y2*1000+y3*100+y4*10+y5

else:

x2=10**10

if booklist[2]>=1:

x3=3*8*0.9+buy_book_question(y1-1,y2-1,y3-1,y4,y5)

# solution=y1*10000+y2*1000+y3*100+y4*10+y5

else:

x3=10**10

if booklist[1]>=1:

x4=2*8*0.95+buy_book_question(y1-1,y2-1,y3,y4,y5)

# solution=y1*10000+y2*1000+y3*100+y4*10+y5

else:

x4=10**10

if booklist[0]>=1:

x5=8+buy_book_question(y1-1,y2,y3,y4,y5)

# solution=y1*10000+y2*1000+y3*100+y4*10+y5

else:

x5=10**10

minval=min(x1,x2,x3,x4,x5)

# print solution

return minval

else:

return 0

def pass_reference_param(booklist):

print booklist

if __name__ == '__main__':

booklist=[5,5,5,3,3,[1,2,3,]]

minval=buy_book_question(5,5,5,3,3)

xx=xx=copy.copy(booklist)

print id(xx[5])

print id(booklist[5])

pass_reference_param()

print minval

print booklist

動態規劃 買書問題

相關的文章出處 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 的費用,三卷則更多。假設具體折扣的情況如下 本...

買書問題 動態規劃C

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