#include<iostream>
using namespace std;
template <typename T>
void InsertSort(T m[], int length) //插入排序, 从小到大
{
for(int i = 1; i < length; ++i)
{
int j ;
T tmp = m[i];
for( j = i; j>0 && m[j-1]>tmp; --j)
m[j] = m[j-1];
m[j] = tmp;
}
}
double Min(double a, double b, double c, double d, double e) //返回最小值
{
double A[5] = {a, b, c ,d ,e};
InsertSort(A, 5);
return A[0];
}
double BuyBook(int a, int b, int c, int d, int e)
{
//把要买的书的数目按从小到大排序,因为每种书价钱一样,所以一种书放在哪个位置无所谓
int n[5] = {a, b, c, d, e};
InsertSort(n, 5);
a = n[0];
b = n[1];
c = n[2];
d = n[3];
e = n[4];
const double large = 100000; //定义一个很大的值,去最小值时不会取到这个值
if(n[0]>0) //数目最少的书都至少有一本,因此此轮可以买1, 2, 3, 4, 5,本都行,去最小值,再递归
{
return Min(8.0+BuyBook(a, b, c, d, e-1),
2*8.0*0.95 + BuyBook(a, b, c, d-1, e-1),
3*8.0*0.9 + BuyBook(a, b, c-1, d-1, e-1),
4*8.0*0.80 + BuyBook(a, b-1, c-1, d-1, e-1),
5*8.0*0.75 + BuyBook(a-1, b-1, c-1, d-1, e-1));
}
else if(n[0]==0 && n[1]>0) //数目最少的一种没了,就不能5种都买了
{
return Min(8.0+BuyBook(a, b, c, d, e-1),
2*8.0*0.95 + BuyBook(a, b, c, d-1, e-1),
3*8.0*0.9 + BuyBook(a, b, c-1, d-1, e-1),
4*8.0*0.80 + BuyBook(a, b-1, c-1, d-1, e-1),
large);
}
else if(n[0]==0 && n[1] == 0 && n[2]>0) //数目最少的2种没了,最多买3种
{
return Min(8.0+BuyBook(a, b, c, d, e-1),
2*8.0*0.95 + BuyBook(a, b, c, d-1, e-1),
3*8.0*0.9 + BuyBook(a, b, c-1, d-1, e-1),
large,
large);
}
else if(n[0]==0 && n[1] == 0 && n[2] == 0 && n[3]>0) //数目最少的3种没了,最多买2种
{
return Min(8.0+BuyBook(a, b, c, d, e-1),
2*8.0*0.95 + BuyBook(a, b, c, d-1, e-1),
large,
large,
large);
}
else if(n[0]==0 && n[1] == 0 && n[2] == 0 && n[3] == 0 && n[4]>0) //数目最少的4种没了,最多买1种
{
return 8.0+BuyBook(a, b, c, d, e-1);
}
else
{
return 0;
}
}
int main()
{
int n[5] = {5,9,3,6,4};
cout<<BuyBook(n[0], n[1], n[2], n[3], n[4])<<endl;
}
最后结果为176
编程之美-买书问题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 问题定义 两个单向链表的头指针,两个链表都可能带环1: 判断这两个链表是否相交2: 如果相交,给出他们相交的第一个...
- 来自《编程之美》电梯调度问题:亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都...
- 1、抗拒学英文 在国内几乎所的编程语言都是外国的,所以学技术必定要学会看英文文档,如果不学英文,是绝对无法从菜鸟转...