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

  • 相关阅读:
    kubernetes 配置示例 Lifecycle
    Kubernetes 集群部署(5) kubectl 常用命令
    Kubernetes 配置示例 一个Pod 包含多个容器
    实现lighttpd+tomcat
    tomcat解决中文乱码问题
    linux安装tomcat
    zz Tomcat+JSP经典配置实例
    jdbc查询大量数据内存溢出的解决方法
    汉明距离
    log4j乱码问题
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3570314.html
Copyright © 2011-2022 走看看