今天小夥伴在群裡給出了一道題
【分享一道題,有興趣的可以做做哈。假設《冰與火之歌》有五卷,每一捲單獨買是20塊。兩卷連買減5%,三卷連買減10%,四卷連買減20%,五卷連買減25%,買相同的卷不打折。比如買兩本卷一,一本卷二,總**是58元。現買了一批書n,計算出它的最低**。】
一看到這道題,瞬間就覺得這麼簡單有什麼值得做的,於是三下五除二寫了這麼乙個演算法:
double money(int* a)
return result;
}
簡單粗魯的貪心演算法。於是遭到了小夥伴的反擊,說我把問題想簡單了。
例如:8本書,買兩個四本比乙個五本乙個三本更便宜。
我的演算法不僅不美,甚至不是最優解。
然後瞬間我又把問題做複雜了,買五種書,一毛錢都不便宜的情況一定是最後需要考慮的,那麼我們只需要考慮買書的先後順序就可以了,做乙個a(4,4) 的全排列。然後再根據實際的優惠情況對a(4,4)種排列裡,明顯不是最優解的給剔除進行優化。
乙個很複雜,巨集觀的想法,可行性有,但是太複雜。
然後看了程式設計之美給的解法,題目中給的資料,4+4的組合比5+3的組合更優,而且有且僅有這乙個特例,所以根據這種情況,對**進行優化
double money(int* a)
return result;
}
把 a[i]/8 特殊組合揪出去單獨處理一下。
其實這個題難點是資料統計,對特殊資料的敏感度,要把(4+4)這個特殊情況給分解出來
《程式設計之美》之買書問題
這兩天剛看 程式設計之美 裡面的一些演算法有些確實經典,非常的感興趣,很喜歡自己先思考一下,然後看看書上的解析。對於1.4節的買書的問題,原書的解法二我看得不是很明白,而且解法一通過區域性最優解得到全域性最優解,這個肯定是不可取的,以下是我個人對這個問題的解法。本數 2 折扣 5 本數 3 折扣 1...
買書問題 程式設計之美1 4
買書問題,如果一種書籍五冊,單獨買一冊8元,買兩冊不同的打95折,買三冊不同的書籍9折,買四冊不同的書籍8折,買五冊不同書籍75折,問怎麼買書最便宜。比如買2本一冊,2本2冊,2本三冊,1本4冊,1本5冊 那麼最優打折方式就是 分兩次購買,一本一冊,一本二冊,一本三冊和一本四冊,然後就是剩下的書籍 ...
程式設計之美之買書問題
關於程式設計之美中買書的問題,我困擾了好久。當然,我的數學能力不強,領悟能力又差,所以才困擾了這麼久。不過,在本人的堅持下,終於理解透徹。為了記住這一時刻,更為了免除以後忘記的可能,暫時記錄如下。書中關於證明f y1 1,y2 1,y3 1,y4 1,y5 和f y1 1,y2 1,y3 1,y4,...