编程之美 1.4 买书问题【贪心思路的分析】

来源:互联网 发布:考研作息时间 知乎 编辑:程序博客网 时间:2024/04/29 03:36

这段时间太忙,好久没有写CSDN了,今天在重新看编程之美1.4买书问题的时候有了新的体会,于是就记录下来。看来真是“温故而知新”

 

1.5首先给出了一个动态规划版本,我第一次看编程之美的时候,自己一下子也想到了动态规划版本,就没往后看了。今天重新看了下才知道后面的贪心才是精华。

 

(1)按照正常的思路,我们有了以下贪心策略:购买Y5本5卷,购买Y4-Y5本4卷,购买Y3-Y4本3卷,购买Y3-Y4本3卷,购买Y2-Y3本2卷,购买Y1-Y2本1卷

 

(2)这样,按照上述策略,我们可以得到总代价为:

         total_cost = Y5 * 5 * 8 * (1 - 25%) +

                            (Y4 - Y5) * 4 * 8 * (1 - 20%) +

                            (Y3 - Y4) * 3 * 8 * (1 - 10%) +

                            (Y2 - Y3) * 2 * 8 * (1 - 5%) + 

                            (Y1 - Y2) * 1 * 8 * 100%

                          = 8      * (Y1 - Y2) + 

                             15.2 * (Y2 - Y3) +

                             21.6 * (Y3 - Y4) + 

                             25.6 * (Y4 - Y5) +

                             30    * Y5       --------------------   式A

(3)观察式A,我们这个贪心策略一定是最优的吗? 如果不是该怎么调整?

        观察式A,我们可以把1个3卷和1个5卷合并成2个4卷,合并之前的所附付金额是 P1 = 21.6 + 30 = 51.6,

        和并之后的金额是P2 = 2 × 25.6 = 51.2。 P2 < P1,所以这个合并调整可以取得更优的结果。其他的合并调整策略,如1个1卷和

        1个3卷合成2个2卷,都会使所付金融边打,因此不能使结果更优。所以调整的策略只有1个3卷和1个5卷合并调整成2个4卷。

 

(4)通过上述分析,我们得到最终贪心策略:

        购买Y5 - K 本卷5,Y4 - Y5 + 2K本卷4,Y3 - Y4 - K本卷3, Y2 - Y3本卷2, Y1 - Y2本卷1, K = min(Y3 - Y4, Y5), END...