购买图书

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

本数

折扣

2

5%

3

10%

4

20%

5

25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。

设计算法能够计算出读者购买一批书的最低价格。

设计思路:这道题我觉得用比较传统的动态规划便可以解决,是动态规划中比较常见的分组问题,算法的时间复杂度为O(n2):

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int m;
 5     cin>>m;
 6     double dp[10000];
 7     double x[5]={8,15.2,21.6,25.6,30};
 8     dp[1]=8;dp[2]=15.2;dp[3]=21.6;dp[4]=25.6;dp[5]=30;
 9     for(int i=6;i<=m;i++){
10         dp[i]=0;
11         for(int j=1;j<=5;j++){
12             dp[i]=max(dp[i],x[j]+dp[i-j]);
13         }
14     }
15     cout<<dp[m]<<endl;
16     return 0;
17 }

运行结果:

原文地址:https://www.cnblogs.com/yifan2016/p/5609512.html