zoukankan      html  css  js  c++  java
  • 编程之美 set 11 买书问题

    题目

    书店搞促销, 同时购买多卷书时, 有机会享受优惠

    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. 书上提供了另一种贪心策略, 但没有严格证明, 没看. 

  • 相关阅读:
    MongoDB面试题
    spider 爬虫文件基本参数(3)
    命令行工具(2)
    初始scrapy,简单项目创建和CSS选择器,xpath选择器(1)
    数据分析实例(离海洋距离与最高温度之间的关系分析)
    路飞业务分析
    MYSQL 主从复制,读写分离(8)
    pyquery 学习
    selenium case报错重新执行
    python小技巧
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3570314.html
Copyright © 2011-2022 走看看