程式設計之美 set 11 買書問題

2021-09-06 14:01:08 字數 784 閱讀 3360

題目

書店搞**, 同時購買多卷書時, 有機會享受優惠

2本優惠 5%, 3本 10%, 4 本 20% 5 本 25%

設計演算法, 求解購買一本書的最低**分析

1. 第乙個感覺是一次購買的越多省錢越多, 即貪心的思想, 但這樣的思路對不對呢? 考慮下面乙個案例

購買兩本卷一, 兩本卷二, 兩本卷三, 一本卷四卷五

假如按照貪心的思路去求解, 共會花費 51.6 元, 而假如四本四本的買, 僅需 51.2 元, 所以貪心法不一定總是最優解

2. 動規解法

f(x1, x2, x3, x4, x5) 表示購買 x1 本卷一, x2... 所需的最少錢數

稍加分析, 可以得出, f(x2, x1, x3, x4, x5) 和上式是等價的, 所以, 我們可以簡單的設為 f(y1, y2, y3, y4, y5) 其中 y1>= y2, y2>=y3 etc

動態規劃的狀態轉移方程就可以寫成

f(y1,y2,y3,y4,y5) = max( f(y1-1,y2-1,y3-1,y4-1,y5-1) if y5 >= 1,

f(y1-1,y2-1,........y4-1, y5) if y4 >=1, etc }

寫成上面的原因是啟發性質的, 因為我們要優先使用卷數較多的書, 盡量使卷數的種類多.

這種解法的時間複雜度是 o(y1*y2...y5), 空間複雜度為 o(y1*y2...y5). 並且, 每次求完 y1-1, y2... 還需要重新排序, 時間複雜度較高

3. 書上提供了另一種貪心策略, 但沒有嚴格證明, 沒看. 

程式設計之美 買書問題

今天小夥伴在群裡給出了一道題 分享一道題,有興趣的可以做做哈。假設 冰與火之歌 有五卷,每一捲單獨買是20塊。兩卷連買減5 三卷連買減10 四卷連買減20 五卷連買減25 買相同的卷不打折。比如買兩本卷一,一本卷二,總 是58元。現買了一批書n,計算出它的最低 一看到這道題,瞬間就覺得這麼簡單有什麼...

《程式設計之美》之買書問題

這兩天剛看 程式設計之美 裡面的一些演算法有些確實經典,非常的感興趣,很喜歡自己先思考一下,然後看看書上的解析。對於1.4節的買書的問題,原書的解法二我看得不是很明白,而且解法一通過區域性最優解得到全域性最優解,這個肯定是不可取的,以下是我個人對這個問題的解法。本數 2 折扣 5 本數 3 折扣 1...

買書問題 程式設計之美1 4

買書問題,如果一種書籍五冊,單獨買一冊8元,買兩冊不同的打95折,買三冊不同的書籍9折,買四冊不同的書籍8折,買五冊不同書籍75折,問怎麼買書最便宜。比如買2本一冊,2本2冊,2本三冊,1本4冊,1本5冊 那麼最優打折方式就是 分兩次購買,一本一冊,一本二冊,一本三冊和一本四冊,然後就是剩下的書籍 ...