一个算法问题
跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通行驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(同时能量清0).加速卡最多可以储存2个,也就是说当你有2个加速卡而能量再次集满,那么能量清零但得不到加速卡。一个加速卡只能维持一段赛道,游戏开始时没有加速卡。 问题是,跑完n圈最少用时为多少?
每组输入数据有3行,第一行有2个整数L( 0 < L < 100),N(0 < N < 100)分别表示一圈赛道分为L段和有N圈赛道,接下来两行分别有L个整数Ai和Bi (Ai > Bi).
例
18 1
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 8 8
我考虑贪心算法。从开始到第15段时,如果不加速,就会有能量满了清零,故在满之前一定要加速,选取中间的能够加速并且加速与不加速时间差最大的一段进行加速,直到最后。
但是有个问题
如果输入是
17 1
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1
如果加速时不增加20%能量的话,使用我这个算法导致15段之前使用一个加速卡,16段开始前为一个加速卡和80%能量,加速一次,在最后一段无法加速。这样结果不如在15阶段浪费掉能量,最后两段加速的结果。
各位帮忙看看算法应该怎么设计