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

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

【问题讨论】:

    标签: explain


    【解决方案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 中选择最大值,则保证该条件始终成立
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2013-10-28
    • 2022-07-22
    • 1970-01-01
    相关资源
    最近更新 更多