题目:在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:

本数 折扣

2 5%

3 10%

4 20%

5 25%

在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。

要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。

分析:

首先假设五册书分别为A,B,C,D,E,不失一般性可以假设Na>=Nb>=Nc>=Nd>=Ne,设所有书可以划分为k组,每组中书不重复,则在最优解中有如下性质:

所有只包含一本书的组均只包含同一本书

若有两组包含一本书的组包含的书不同,则这两组合并,能得到更优解,与最优解矛盾.

包含一本书的组只包含A

若包含书为A',若Na'==Na,则A,A'对调即可,若Na'

所有只包含两本书的组均包含相同两本书

组(A', B'), (A',C')折扣0.2重组为(A',B',C')与(A)折扣0.3

包含两本书的组必包含A

若存在包含一本A的组,而两本书的组不包含A,则合并能得更优解。若不存在包含一本A的组,而两本书组包含为A',A'',则包含三本书,四本组必含A而缺A'者。(A', A''), (AXY), 折扣0.4不如(A''),(AXYA')0.8。(A',A''),(AXYZ)折扣0.9不如(A''),(AXYZA')1.25。

包含两本书的组必包含B

同上证。

所有只包含三本书的组均包含相同三本书

(A,B,C),(A,B,D)折扣0.6,(A,B),(A,B,C,D)折扣0.9

所有包含三本书的组均包含A

若存在只包含A的组,合并得更优。若存在只包含A, B的组(A,B)(XYZ)折扣0.4,不如(B)(AXYZ)折扣0.8。若不存在一,二本组,假设三本书组为(X,Y,Z),则必有包含A的四本组缺X,(X,Y,Z)(A,A',A'',A''')折扣1.1,不如(Y,Z),(A,A',A'',A''',X)折扣1.35

所有包含三本的组均包含B,C

同上可证

所有包含四本书的组均包含A,B,C

设XYZW为(ABC)(BCDE)折扣1.1,不如(B,C),(A,B,C,D,E)折扣1.35。其它情况同理可证。

包含五本书与包含三本书情况不会同时出现

(A,B,C),(A,B,C,D,E)折扣1.55,不如(A,B,C,D),(A,B,C,E)折扣1.6

由以上证明可得如下结论:

每组均包含A,所有组数与A相同

所有包含两本及以上的组均包含B,组数与B同

所有包含三本及以上的组均包含C,组数与C同

三,五不并存

由此可得解法如下:

const double BuyBook::UNIT_PRICE = 8;

const double BuyBook::DISCOUNTS[5] = {1, 0.95, 0.9, 0.8, 0.75};

static const int BOOK_KINDS = 5;

double BuyBook::SearchFast(int* books)

{

Sort(books);

int g[5];

g[0] = books[0] - books[1];

g[1] = books[1] - books[2];

g[2] = books[2] - books[3];

g[3] = books[3] - books[4];

g[4] = books[4];

int t = min(g[2], g[4]);

if (t > 0)

{

g[2] -= t;

g[4] -= t;

g[3] += 2 * t;

}

double sum = 0;

for (int i = 0; i < BOOK_KINDS; ++i)

{

sum += g[i] * (i+1) * UNIT_PRICE * DISCOUNTS[i];

}

return sum;

}

买书折扣算法 c语言,买书折扣最优惠问题解法相关推荐

  1. 北京/上海内推 | 小红书多模态算法组招聘视觉/多模态/NLP算法实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 小红书 小红书多模态算法组是小红书多模态和计算机视觉技术应用的最前线,拥有 ...

  2. python写数据结构书_有哪些用 Python 语言讲算法和数据结构的书?

    python数据结构基础工具书籍下载-持续更新​www.jianshu.com 以上网址有大量python数据结构的书籍下载,内容比较长,我这边拷贝了一部分. 本书示例丰富,图文并茂,以让人容易理解的 ...

  3. 小红书算法sign php,易语言小红书sign算法源码

    易语言小红书sign算法源码 @397951321.版本 2 .子程序 计算sign, 文本型 .参数 请求参数, HashMap类 .局部变量 A, 文本型, , "0" .局部 ...

  4. 买了很多的书,看了很少的书.

    买了很多的书,看了很少的书. 为什么?为什么这么浮躁. 我抑制不住自己看见好书就想买的冲动. 这,到底是爱书,还是糟蹋了书? 不管了,买了本<<道法自然>>和<<滕 ...

  5. 新书推荐 |《机器学习:算法视角(原书第2版)》

    新书推荐 <机器学习:算法视角(原书第2版)> 长按二维码 了解及购买 CRC Press机器学习领域畅销教材: 知名媒体推荐的十大机器学习入门教材之一: 新西兰惠灵顿维多利亚大学数学与统 ...

  6. 《算法心得:高效算法的奥秘(原书第2版)》

    <算法心得:高效算法的奥秘(原书第2版)> 基本信息 原书名:Hacker's Delight,Second Edition 原出版社: Addison-Wesley Profession ...

  7. 看书标记【R语言 商务数据分析实战4】

    看书标记--关于R语言 chapter 4 4.2 任务实现 [R语言 商务数据分析实战4] chapter 4 财政收入预测分析 从海量数据中发现隐藏的运行模式,并提供具有决策意义的信息.变量过多会 ...

  8. 看书标记【R语言 商务数据分析实战6】

    看书标记--关于R语言 chapter 6 6.2 任务实 [R语言 商务数据分析实战6] chapter 6 P2P信用贷款风险控制(用户逾期还款概率模型) 关于数据库的应用+数据清洗+实时数据识别 ...

  9. 看书标记【R语言 商务数据分析实战9】

    看书标记--关于R语言 chapter 9 9.2 任务实现 [R语言 商务数据分析实战9] chapter 9 餐饮企业综合分析 统计分析>>ARIMA预测销售额>>协同过滤 ...

最新文章

  1. 从马克思哲学客观原理角度——反思大学生创业2017-12-15
  2. springboot取yml中的值_@Value拜拜:更优雅的获取springboot yml中的值
  3. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...
  4. catkin_make
  5. OpenJudge NOI 1.5 25:求特殊自然数
  6. 石油、黄金与美元的游戏
  7. Python实战从入门到精通第十三讲——返回多个值的函数
  8. 加拿大程序员趣闻系列 1/N
  9. Week 2 代码审查
  10. 数据接口复习 3 stack and queue
  11. 数字图像处理-冈萨雷斯(学习笔记)
  12. linux没有cpufreq目录,【原创】Linux cpufreq framework
  13. vscode 用户设置与工作区设置
  14. 企业青睐什么样的产品经理
  15. 买家用投影仪应该关注哪些数据?
  16. 《神经科学:探索脑》学习笔记(第9章 眼睛)
  17. 博物馆3d数字化全景展示设计方案
  18. codecs.open 和一般的open 区别~
  19. KNIME 安装配置
  20. oracle中spool命令的使用,Oracle中Spool命令的使用方法实例

热门文章

  1. input搜索框获取焦点时,placeholder消失
  2. 2020ICPC济南站复盘及近期打算
  3. 哈夫曼树以及哈夫曼算法
  4. 中介者模式与观察者模式
  5. JQuery-jq属性操作、jq文本属性值、jq元素(创建、添加、移除)操作、jq尺寸、位置操作
  6. linux上tomcat版本信息,Linux 查看Tomcat版本信息
  7. 为数据访问页中的数据源控件编写脚本
  8. 虚幻商城模型转MetaHuman
  9. Python变量引用错误
  10. python爬取全国高校在某省的录取分数线