问题:玩家背包里存在加速道具,加速的时长分别如下:

求解:当希望加速91个小时的时候,最优的道具使用组合(要求:1、浪费的时长最小;2、道具数量最少)
注:暂不考虑道具不够的情况。
原理:利用动态规划的思想来实现,转化为子问题去实现。
设道具列表为p = {5,7,21,30,......}
假设r[91]为需要求的最优解,那么
r[91]可以转化为:
说明:在已知前一个最优解r[90]的情况下,让这个最优解r[90]依次加上加速道具的时长,如果比期望的总时间91多,则这个是一个有效解,找到r[90]的所有有效解,最小的有效解就是一个最优解。(小优化:当 已经是最小的最优了,可以提前break掉,如果希望大道具优先,那我们对于q的遍历就可以从大到小来)
依次类推,我们找到r[89],r[88]....r[1]的最优解,在这些最优解中取最小的就是r[91]的最优解了。
算法及优化如下:

运行结果:

进一步优化:


网友评论