《编程之美》读书笔记(四): 卖书折扣问题的贪心解法

 
《编程之美》读书笔记(四):卖书折扣问题的贪心解法
       每次看完《编程之美》中的问题,想要亲自演算一下或深入思考的时候,都觉得时间过得很快,动辄一两个小时,如果再把代码敲一遍的话,需要的时间可能更长,真是搞不懂通过微软面试的那些家伙的脑袋到底什么构造,书的序言中提到他们每次面试45分钟,还要写出程序?!在我看来,如果是控制CPU曲线或是中国象棋问题或许还有可能,如果是买书折扣问题,我觉得真的是不太容易,尤其是如果当面试者钻进本题的贪心解法而不是动态规划算法的思路之后,因为我写这篇文章前前后后大概用了5个小时 :-( 。不过我想只要是学习就不是浪费时间,今天上网看到微软的校园招聘网站又有更新,等我把这本书看完,就投简历过去试一试 :-) 。
1 问题描述及分析
       买书折扣问题的描述是,某出版社的《哈里波特》系列共有5卷,每本单卖都是8块钱,如果读者一次购买不同的k(k>=2)卷,就可以享受不同的折扣优惠,如下所示:

问题是如果给定一个订单,如何计算出最大的折扣数?
书中给出的动态规划解法这里就不再赘述了。不过,里面有两个问题需要单独关注一下:(1)如果订单描述为(X1,X2,X3,X4,X5),其中X1-X5为所订数的数量,其所在位置为卷的编号,即第一卷X1本,第二卷X2本,…,第5卷X5本;如果订单为:(X3,X2,X4,X5,X1),则表示第一卷X3本,第二卷X2本,…,第五卷X1本。我们可以很容易的看到,由于每本书的价格相同,所以折扣的多少仅仅在于如何选取而不在于究竟取那一卷书。因此,上面两个订单的最大折扣数是相同的,这也使得我们可以使用统一的方法(Y1,Y2,Y3,Y4,Y5),其中Y1≥Y1≥Y1≥Y1≥Y5,来表示一个订单。作者将每本书的定价设为相同的是为了简化问题,因为如果每本书的定价也不同,则问题就会变得更加复杂,这时我们就不能仅仅考虑选几本书,还要考虑选哪几本。

 

时间: 2024-10-29 06:13:38

《编程之美》读书笔记(四): 卖书折扣问题的贪心解法的相关文章

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

        前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术:            <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源            <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石            <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair        这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编

Programming Ruby读书笔记(四)

Ruby正则表达式 三种表示方法: Regexp.new('^s*[a-z]') /^s*[a-z]/ %r...{^s*[a-z]} 测试代码: def show_reqexp(a, re) if a =~ re "#{$`} << #{$&} >> #{$'}" else "no match" end end puts show_reqexp("Fats Waller", /ll/) 结果:Fats Wa &l

《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史_javascript技巧

JavaScript 是Netscape公司与Sun公司合作开发的.在 JavaScript 1.0发布时,Netscape Navigator主宰着浏览器市场.微软在推出IE3的时候发布了自己的VBScript语言,同时以JScript为名发布了JavaScript 的一个版本,很快赶上了 Netscape 的步伐.面对微软公司的竞争,Netscape 和 Sun公司联合ECMA(欧洲计算机制造商协会)对JavaScript 语言进行了标准化,于是出现了ECMAScript语言,这是同一种语言

More Effective C++ 读书笔记四——异常

条款9:利用destructors避免泄漏资源 这里开始介绍了auto_ptr,其实就是利用了c++局部对象在离开作用域的时候,其析构函数会被调用,来避免资源泄漏.这样的好处,就是不管是作用域正常结束(跑出代码块)还是异常结束(抛出异常),对象的析构函数都能保证被调用. 条款10:在constructors内阻止资源泄漏 c++只会析构已构造完成的对象.对象只有在其constructor执行完毕才算是完全构造妥当. 也就是说,c++不自动清理那些"构造期间抛出exceptions"的对

《JavaScript DOM 编程艺术》读书笔记之DOM基础_javascript技巧

DOM              DOM:文档对象模型: 节点        元素节点:DOM的原子是元素节点.<body>.<p>.<ul>之类的元素.元素可以包含其他的元素.没有被包含在其他元素里的唯一元素是<html>元素        文本节点:在XHTML文档里,文本节点总是被包含在元素节点的内部.        属性节点:属性节点用来对元素做出更具体的描述.例如,几乎每个元素都有一个title属性,而我们可以利用这个属性对包含在元素里的东西作出准

《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法_javascript技巧

注释         单行注释://         多行注释:/* */         "<!--"可以用作单行注释,由于和HTML的"<!--  -->"多行注释类似,容易混淆,所以不建议这种注释方法 变量        在JavaScript 语言里,变量和其他语法元素的名字都是区分字母大小写的.名字mood的变量与名字是Mood.MOOD或mOOd的变量没有任何关系,它们不是同一个变量.        JavaScript 语法不允许变量

锋利的jQuery--Ajax(读书笔记四)

1.表单值得序列化 <1>serialize() 例子: html: <form action=""> First name: <input type="text" name="FirstName" value="Bill" /><br /> Last name: <input type="text" name="LastName"

101 VB.NET Applications 读书笔记(1)

application|笔记 今天开始看<101 Microsoft Visual Basic .NET Applications>. 这本书是很多人集体编写的,带有101个示例程序,涵盖了VB.NET编程的大部分方面,主要作者是Sean Campbell, Scott Swigart, Bob Carver等. 书由MSPress出版,看了一下,感觉还可以,现在开始写读书笔记吧. 书中提到,书中的程序包含了近700个小时的编程实践(Practice),个人认为,学习编程这东西就是要实践,要读

《编程之美》读书笔记(一):中国象棋将帅问题

     千呼万唤始出来,在跳票了快一个月之后,虽然明知道书里还有不少错误没改过来(附了一整页的勘误),但是感觉已经不能等下一版了.赶快去书店买回来,吃完饭躺床上舒舒服服地看.大致翻看之后,总体感觉是书中的内容没有"脱离群众",很多都是我们平时生活.工作中经常能遇到的.题目不见得难,基本上给一本<算法导论>和足够的时间,大多数人都能解决其中的问题.但注意副标题--"微软技术面试心得",这就给这本书定下一个基调:面对这些我们并不陌生.也并非特别困难的问题,