codechef walk解决方案背后的解释



在解决代码厨师问题WALK时,我想出了一种使用分而治之的方法来解决问题的算法,根据我的算法,我们找到数组中的最大值,并将数组分成两部分(一部分从Max元素开始,另一半从Max元素的下一部分到数组的末尾),然后我们使用Max+(n-1)找到数组第一部分(挑战Max元素的部分)的初始速度,其中n是数组该部分中的元素数量。。。。我们对阵列的每个部分都做这件事,在计算每个部分的初始速度后,我们检查阵列的一部分的初始速率是否小于或等于Max+1,其中Max是在所考虑的部分之前的阵列的该部分的最大元素,如果是这种情况,我们什么也不做,我们找出Max+1和初始速度之间的差异,并将该差异添加到所考虑零件之前的零件的初始速度上,我们不断重复这个过程,直到不需要更多的更改。现在这个算法肯定会起作用,但它会超过时间限制。。当我看到这篇社论时,它对这个问题只有一线解决方案。。有人能向我解释一下这个解决方案吗?我不明白。提前谢谢。

设初速度为V。当他们在第一个(基于0的索引)商店时,他们的速度仍然是V,也就是V>=W1。当他们穿过它去第二家商店时,速度变成了V-1。我们知道V-1>=W2。同样,当他们穿过它去第三家商店时,速度变为V-2。我们知道V-2>=W3。继续这样,我们看到这种关系成立:V-i>=[0,n-1]中所有i的Wi

V0 >= W0 + 0
V1 >= W1 + 1
V2 >= W2 + 2
V3 >= W3 + 3 ...

因此,对于所有i,Vi>=Wi+i。

选择V作为所有Wi+i 中的最大值

最新更新