編程之美1.4 買書問題

     在節假日的時候,書店一般都會做促銷活動。由於《哈利波特》系列相當暢銷,店長決定通過促銷活動來回饋讀者。在銷售的《哈利波特》平裝本系列中,一共有五卷,用編號 0, 1, 2, 3, 4 來表示。假設每一卷單獨銷售均需要 8 歐元。 如果讀者一次購買不同的兩卷,就可以扣除 5% 的費用,三卷則更多。
     在一份訂單中,根據購買的卷數以及本書,就會出現可以應用不同折扣規則的情況。但是,一本書只會應用一個折扣規則。比如,讀者一共買了兩本卷一,一本卷二。那麼,可以享受到 5% 的折扣。另外一本卷一則不能享受折扣。如果有多種折扣,希望能夠計算出的總額儘可能的低。
     要求根據這樣的需求,設計出算法,能夠計算出讀者所購買一批書的最低價格。

問題分析:
     首先考慮貪心法,貪心法畢竟比較高效。貪心法要求具有貪心選擇性,這個問題裏不是很明確,因爲這個跟折扣的數目是有關係的。因此可以考慮一種邊界情況,來考察是否具有貪心選擇性。我舉個例子,一共8本數,每種書本數分別爲2,2,2,1,1,這樣的情況下,貪心策略的方法是5+3,另一種可行方案是4+4。經過計算髮現,貪心策略的總價高於了4+4的方案,因此不滿足貪心選擇性。這類問題是否滿足貪心選擇性事實上和具體的題目數據有關,假如折扣的差距更大一點,那麼可能就會滿足了,需要具體看。
     這樣的話考慮動態規劃。動態規劃需要重疊性的子問題才能提高效率。如何劃分子問題呢,由於折扣是每次購買給一次折扣,那麼這個狀態的確定就要根據每次購買的操作來確定。考慮到每本書價格相同,並且折扣時不關心是哪幾本書,簡化問題起見把要購買的書的組合X1,X2,X3,X4,X5規定爲從大到小排序。遞推關係可以這樣描述,每一次購買的操作可以選擇購買1-5本書(假如可以的話),然後再對剩下的書進行相同的操作,取最大值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章