在 节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五 卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 折扣
2 5%
3 10%
4 20%
5 25%
方法一:
f(x1,x2,x3,x4,x5)=
min{
8*5*(1-25%)+f(x1-1,x2-1,x3-1,x4-1,x5-1);
8*4*(1-20%)+f(x1-1,x2-1,x3-1,x4-1,x5);
8*3*(1-10%)+f(x1-1,x2-1,x3-1,x4,x5);
8*2*(1-5%)+f(x1-1,x2-1,x3,x4,x5);
8*1+f(x1-1,x2,x3,x4,x5);
}
这个递归方法够复杂。
试试另一种算法:首先考虑10本以下:
1,2,3,4,5本的话不必设计算法,直接算就行了。
对于大于5本的情况,不应一本单独付钱,因为没有折扣
6==4+2=3+3=2+2+2;
7=5+2=4+3=3+2+2;
8=5+3=4+4=3+3+2=2+2+2+2;
9=5+4=5+2+2=4+3+2=3+3+3;
10=5+5=5+3+2=4+4+2=4+3+3=3+3+2+2=2+2+2+2+2;
对于大于10本的去情况可以将分成几组,分别对于各组求最优解即可。