大致题意:
给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。
【规定买任一类的珍珠个(价格为),都要支付的钱,即额外支付】
例如样例Input的第二个例子:
3
1 10
1 11
100 12
需要买第一类1个,第二类1个,第三类100个
按常规支付为 (1+10)*10 + (1+10)*11 + (100+10)*12 = 1551元(一共买了102个珍珠)
但是如果全部都按照第三类珍珠的价格支付,同样是买102个,而且其中总体质量还被提高了,但是价格却下降了:(102+10)*12 = 1344元
而对于样例Input的第一个例子:
2
100 1
100 2
按常规支付为 (100+10)*1 + (100+10)*2 =330元
但是全部按第二类珍珠的价格支付,同样买200个,虽然总体质量提升了,但是价格也提高了: (202+10)*2=424元
一开始想过从头到尾遍历珍珠的价格和数目,每次都看相临的两个,如果把当前这一批放入下一个等级价格降低,则将他放到下一个等级,否则直接算在当前等级的买的价格加到答案中,最后一等后设置最大值,保证不会再向后放.,但是这样的思路其实是错误的,以下是证明:
价格
假设贪心得出和两个前提
但是对于即不采取归并更小的情况是否存在呢
化简式子:
对比条件,我们知道
完全可以有
所以贪心策略是错的
首先证明最优解中肯定不会有交叉的替换,即在质量为a<b<j<c<d的情况下,如果a被c替换,那么b也一定要被c替换 假设在最优解中存在:a被c替换且b不被c替换的情况:
1.b不被任何替换 那么此时把a换成用b替换 得到比原来更优的解,错误
2.b被j替换,此时把a换成用j替换 得到比原来更优的解,错误
3.b被d替换,此时把b换成用c替换 得到比原来更优的解,错误
因此,不存在交叉的替换,那么最优解分为下面两种情况:
1.不存在断点,即所有的都用最大一种替换,
2.存在断点,最后一个断点为i,那么最优解必为
每个点都有可能是最后一个断点,因此产生了我们的DP方程:
把dp[0]设成0的话 2就包含了1 dp[c]就是最后的答案
有点像最长上升子序列的问题