codechef walk 解决方案背后的解释

Posted

技术标签:

【中文标题】codechef walk 解决方案背后的解释【英文标题】:Explanation behind codechef walk solution 【发布时间】:2016-01-09 18:51:33 【问题描述】:

在解决 codechef 问题时,我想出了一个算法来使用分而治之的方法来解决问题,根据我的算法,我们在数组中找到最大值并将我们的数组分成两部分(一个从开始到Max 元素和另一半从 Max 元素的下一个到数组的末尾),然后我们使用:Max +(n-1)找到数组的第一部分(与 Max elemeny 竞争的部分)的初始速度其中 n 是数组该部分中的元素数 .... 我们对数组的每个部分都执行此操作,并且在计算每个部分的初始速度之后,我们检查数组的一部分的初始速度是否小于或等于 Max + 1 其中 Max 是考虑中的部分之前的数组部分的最大元素,如果是这种情况,我们什么也不做,我们找出 Max + 1 和初始速度之间的差异并添加与 th 之前部分的初始速度之差e 部分正在考虑中,我们会不断重复此过程,直到不再需要更改为止。 现在这个算法肯定会工作,但它会超过时间限制..当我看到社论时,它有这个问题的一条线解决方案..有人可以向我解释那个解决方案,我无法理解。 提前致谢。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

您能否详细说明“在所有 Wi+i 中选择最大的 V”.. 我的意思是为什么我们需要选择最大的 V? 因为这个条件必须为所有 i 保持 ** Vi >= Wi + i **。如果您在所有此类 Vi 中选择最大值,则保证该条件始终成立

以上是关于codechef walk 解决方案背后的解释的主要内容,如果未能解决你的问题,请参考以下文章

IDE 中的代码正确,但 CodeChef 中出现错误

CodeChef CBAL

CodeChef PREFIXORPrefix XOR

CodeChef Dynamic GCD

codechef问题COVIDLQ错误的应答错误

在 codechef 和 spoj 问题中使用模 10^9+7 的意义是啥?