原题:
某出版社的《哈里波特》系列共有5卷,每本单卖都是8块钱,如果读者一次购买不同的k(k>=2)卷,就可以享受不同的折扣优惠,如下所示:
求,如果买一批书的最低价格,即最大折扣
简化版本:
将“不同的k卷”这个条件去掉。
表面上这样就变成了几乎不相关的一个题目,实际上并不是这样。
2个题目的思路其实还是差不多,这一点,可以从把正整数n表示成若干个正整数的和,求积的最大值和把正整数n表示成若干个不同的正整数的和,求积的最大值这2个题目的相似性看出来。
这个简化的版本,正是原题的铺垫。
问题重述:
有n本书,可以将n拆开成若干部分,每一部分都是1-5本,对于每一部分,如果不止1本就可以享受上图中的折扣,现在要求总折扣的最大值。
名词定义:
(1,2)表示一个部分是1本书,另外一个部分是2本书,(3)表示一个部分是3本书,以此类推。
(1,2)<(3)表示(1,2)的折扣小于(3)(下面还有稍微详细一些的介绍)
注:(1,2)的折扣为1*0+2*5%=10%,(3)的折扣为3*10%=30%
n1,n2,n3,n4,n5:ni表示一个部分里面的书的个数为i的这样的部分的个数
注:如果将n拆开成6个部分,大小分别为1,1,3,4,4,5(n=1+1+3+4+4+5=18)
那么n1=2,n2=0,n3=1,n4=2,n5=1
问题求解:
(其实问题已经转化成了单纯形的问题,不过这里我并不准备讨论这个,因为这对原题毫无帮助)
首先,列出下列10个容易得到的条件:
(1,1)<(2)
(1,2)<(3)
(1,3)<(4)
(1,4)<(5)
(2,2)<(4)
(2,3)<(5)
(2,4)<(1,5)
(3,3)<(1,5)
(3,4)<(2,5)
还有一个特殊的,(3,5)<(4,4)(这个也是书上一直在讨论的,阻碍贪心的地方)
再解释一下含义:例如(3,4)<(2,5)表示的是,
如果3本书按照3本书的折扣10%计算,另外4本书按照20%的折扣计算,总折扣是3*10%+4*20%=110%,但是如果2本书按照2本书的折扣5%计算,另外5本书按照25%计算,总折扣是2*5%+5*25%=135%,
因为110%<135%,所以将7本书拆开成(3,4)不如拆开成(2,5)
然后,根据上述的10个条件,依次可以得到:
n1<=1
n1*n2=0
n1*n3=0
n1*n4=0
n2<=1
n2*n3=0
n2*n4=0
n3<=1
n3*n4=0
n3*n5=0
解释第一条结论n1<=1:如果有2个部分都只有1本书,不如将这2个部分合并为1个部分,所以最多只有1个部分是只有1本书的
解释第二条结论n1*n2=0:如果有n1和n2都不为0,将1个大小为1的部分和1个大小为2的部分合并为1个大小为3的部分,总折扣会变大。所以n1和n2至少有1个为0
后面的以此类推。
下面根据这10个等式和不等式,进行化简:
一,根据前4个结论
n1<=1
n1*n2=0
n1*n3=0
n1*n4=0
结果可以分成2大类,第一类是n=1+n5*5,即1个部分有1本书,n5个部分有5本书
第二类是n=n2*2+n3*3+n4*4+n5*5,含义同上。
二,对第二类继续分类
n2*n3=0
n3<=1
n3*n4=0
n3*n5=0
根据这4个结论,第二类又可以分成2类
第1类是n3=1,那么n2=0,n4=0,n5=0,所以n=3
第2类是n3=0,那么n=n2*2+n4*4+n5*5
三,对第2类继续分类
n2<=1
n2*n4=0
根据这2个条件,第2类又可以分成2种情况
第1种是n2=1,n4=0,那么n=2+n5*5
第2种是n2=0,那么n=n4*4+n5*5
四,对第2种情况继续分类
注意到,10个条件对应的10个结论都已经用完了,这里再补充一个条件和结论:
(4,4,4)<(5,5,2)所以n4<3
所以第2种情况可以分成3种:n4=0,n4=1,n4=2
综上所述,一共有6种情况:
n=1+n5*5
n=3
n=2+n5*5
n=5+n5*5
n=4+n5*5
n=4+4+n5*5
其中n5都是非负整数。
除了n=3之外,另外5种情况的n,n%5都互不相同
可以看出来,这6种情况互不交叉,且刚好划分整个正整数集
对于任意正整数n,如果n=3,那么就不需要拆分,如果n不是3,那么根据n%5的值,就可以在除了n=3之外的另外5种情况中找到对应的一种。
下面说明为什么这样就是最优解:
首先,根据上面的一系列推理,n的拆分只能是这6种情况,所以必定是6种情况中的某一种。
然后,这6种情况是互不交叉的,所以n是哪一种情况是唯一确定的。
最后,因为每种情况中,除了n5之外都是可以确定的,所以n的拆分也就唯一确定了。
例如,123本书,123%5=3,那么123=4+4+23*5就是最优拆分。