标签:如何 mic 最优 魔法 16px 速度 精灵 题目 开始
妙
还记得16年做的时候是抄书上的标程的。现在回头去看看这题,这方法好妙啊。
先讲标程——
首先我们可以知道当魔法充足的时候,用魔法是比跑步更优的。于是开始初始化。
第一遍 i = 1..t 是假设守望者只有使用/恢复魔法两种操作。得到初始 f 数组。
第二遍 i = 1..t 是假设守望者每一秒都跑步,再取max(f[i], f[i-1]+17)
这个max操作的正确性怎么确定呢?
我们已经知道跑步的时间有可能用来恢复魔法更优
在第一遍的操作里,已经确定了每一次最快速使用魔法的方式;第二遍操作时,如果将跑步时间用来恢复魔法能够更优,那么当 i 枚举到一个值时,不难发现f[i] > f[i-1] + 17,所以第二遍中这一部分的操作对最终结果并没有影响。
由此观之,最终 f 数组表示的是每一秒守望者最多能到达的路程,而不是整条路线最优解的过程,因此解决了第二问。
DFS思路——
因为守望者还有一个魔法值m,所以最优性剪枝时比较麻烦:并不能确保之前的一种当前状态较优的方法会最终会被保留,因为还可以用魔法呢。
所以还要保存一个mi数组记录,而且在确定最终解时实现比较麻烦。
标签:如何 mic 最优 魔法 16px 速度 精灵 题目 开始
原文地址:http://www.cnblogs.com/antiquality/p/7942805.html